Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 21:44   #1
Mikhail91
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 15
Восклицание Динамический массив!

Мной была создана программа,в которой присутствует массив! практически всё работает!Но Объём массива уже задан в программе(M[10]), а мне нужно чтобы я через едит вводил кол-во его элементов (N). Так необходимо его прописать,я сделал набросок, но незн куда вставить, да наверн и ошибки есть:

Код:
 int N; 
double*M;
Label14->Caption<<"Введите кол-во эл-тов(в моём случае машин) ";
Edit3->Text>>N;
M=new double[N];
if (M==0) 
{Label14->Caption<<
}
for(int i=0;i<N;++i)
Edit3->Text>>M[i];
Прошу помочь, я прикреплю свою программу,где вы сможете изменить код!(когда будете указывать кол-во машин-помните не более 10!!!!!Массив ограничен)

P.S Есть ещё кнопка сброс- не знаю как очистить массив(нужн код)!
Вложения
Тип файла: rar Proga.rar (390.7 Кб, 8 просмотров)

Последний раз редактировалось MaTBeu; 14.02.2010 в 00:02.
Mikhail91 вне форума Ответить с цитированием
Старый 13.02.2010, 22:50   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

А что собственно не понятно? В вашем билдере я не разбираюсь, но динамическое выделение памяти сделано правильно. Только не забудьте потом освободить выделенную память
Код:
delete[] M;
З.Ы. Зачем после каждой фразы восклицательный знак? Вас переполняют эмоции? =))
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 13.02.2010, 23:29   #3
Mikhail91
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 15
По умолчанию

=)))Наверн эмоции)

Я незн куда етот код вставить) В начало всего кода, а delete в конец? Прост я уже пробовал-чёт не получается, поэтому и скинул всю прогу+код,чтобы вставили в нужное место!,но всё равно спс что уделил внимание) Жду ещё подсказок
Mikhail91 вне форума Ответить с цитированием
Старый 13.02.2010, 23:51   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Например, кидаете на форму кнопку, в событии по клику на ней:
Код:
N = (Edit1 -> Text).ToInt();
M = new double[N];
а
Код:
delete[] M;
вставляете в событие OnDestroy главной формы.

Где-то так.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 14.02.2010, 12:27   #5
Mikhail91
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 15
По умолчанию массив

Я разместил на форме 1 кнопку(Вычислить),4 едита(для ввода данных),1 лабел и поле мемо(для вывода массива)Т.е. упростил свою прогу(чтоб попробовать создать дин массив). И ввёл исправленный код,но прога выдаёт ошибку, вот код-где может быть ошибка:
Код:
#include <math.h>

TForm1 *Form1;
int i;
float P=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
long fact(long n){
if(n==0||n==1)return 1;
return (n*fact(n-1));
} //расчитывается факториал

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
int N; 
double*M;
Label1->Caption = "Введите кол-во элементов массива ";
N = Edit3->Text.ToInt();
M = new double[N];
if (M) 
{
 for(int i=0;i<N;i++)
  Edit3->Text += FloatToStr(M) + " ";
}

float obs,p;
float a=StrToFloat(Edit1->Text);//
float t=StrToFloat(Edit2->Text);
double R=StrToInt(Edit4->Text);

{
  obs=1/t;   //рассчитываю obs,p эти данные нужны (для вычисления массива)
  p=a/obs;

}

for(i=1; i<=N; i++)
  {
  if (i<R) M=(fact(N)*pow(p,i))/(fact(i)*fact(N-i));
  else M=(fact(N)*pow(p,i))/(fact(R)*pow(R,i-R)*fact(N-i));
  Memo1->Lines->Text=Memo1->Lines->Text +" "+ "P"+i+"="+ FloatToStrF(M, ffFixed, 7, 4); ;// заполняю и вывожу массив
  }

delete[] M;

}

Вот упрощённая прога! и картинка с ошибкой!
Изображения
Тип файла: gif Безымянный.gif (148.2 Кб, 146 просмотров)
Вложения
Тип файла: rar 2.rar (356.7 Кб, 5 просмотров)

Последний раз редактировалось MaTBeu; 14.02.2010 в 13:49.
Mikhail91 вне форума Ответить с цитированием
Старый 14.02.2010, 13:51   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
И ввёл исправленный код,но прога выдаёт ошибку
Это ведь ваша программа выдает ошибку, откуда мы можем знать где она? Спросите у компилятора, может он знает лучше. И научитесь пользоваться отладкой.
MaTBeu вне форума Ответить с цитированием
Старый 14.02.2010, 14:28   #7
Mikhail91
Пользователь
 
Регистрация: 10.02.2010
Сообщений: 15
По умолчанию

Я имел в виду код который мне подсказали! Но что то прога не хочет работать, поэтому и попросил найти ошибку
Mikhail91 вне форума Ответить с цитированием
Старый 14.02.2010, 14:38   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
 for(int i=0;i<N;i++)
  Edit3->Text += FloatToStr(M) + " ";
Куда ж у вас индекс запропал? И не только здесь, но и далее.
Код:
 for(int i=0;i<N;i++)
  Edit3->Text += (FloatToStr(M[i]) + " ");
Кстати, по-моему, у String нет оператора +=. И в данном конкретном месте вам выведется мусор, т.к. массив неинициализирован.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 14.02.2010, 14:38   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Но что то прога не хочет работать
Спросите у компилятора. Если есть ошибки, то он вам подскажет где.
Цитата:
Кстати, по-моему, у String нет оператора +=. И в данном конкретном месте вам выведется мусор, т.к. массив неинициализирован.
Есть там и оператор += и -=.
Цитата:
Edit3->Text
это текст компоненты, он всегда инициализирован.
MaTBeu вне форума Ответить с цитированием
Старый 14.02.2010, 14:45   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Есть там и оператор += и -=.
Проверил - действительно есть. Во всяком случае, с отдельно объявленной строкой все нормально, а вот конструкции вроде
Код:
Label1 -> Caption += " Something";
эффекта не дают (поэтому у меня и зародились сомнения), только если
Код:
Label1 -> Caption = Label1 -> Caption + " Something";
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив Zhanna5006 Помощь студентам 7 10.01.2010 14:09
Динамический массив Ueshua Общие вопросы C/C++ 3 19.12.2009 22:12
динамический массив Diller Помощь студентам 48 07.10.2007 16:43
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31