C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сохранение массива при очередном открытии формы
Велес
Отправлено: 21.11.2003, 19:54


Ученик-кочегар

Группа: Участник
Сообщений: 18



Добрый вечер, ещё разочек!

Помогите, никак не соображу....


Задача: Есть форма, в которой расположен набор кнопок. Нажимается комбинация кнопок. Алгоритм следующий:

1. На форме 1 выбирается кнопка. Открывается Форма 2 с некоторыми параметрами, указывающими на принадлежность к Форме 1. В Форме 2 расположено 3 объекта Edit. В них вносится по одному значению, которые помещаются в соответствующие массивы. Закрываем Форму 2.

2. На Форме 1 выбираем другую или ту же кнопку. Открывается Форма 2..... и т.д.

3. После набора в Форме 1 соответствующей комбинации кнопок происходит переход к Форме 3, где данные из массивов (Форма 2) помещаются в формулы, производится расчёт в цикле и каждое посчитанное значение (точнее группа из 3-х значений) выводятся на печать.

ПРОБЛЕМА:

При добавлении на Форме 2 в массивы несколько раз (без закрытия и повторного открытия по другому вызову) и дальнейшем расчёте в Форме 3 — всё работает нормально. Если же идти по пути, который и был задуман, то в Форме 3 выводится только значения соответствующие расчёту по последним элементам массива, которые были введены.

Т.е. вопрос получается таков: как сохранить весь массив, поскольку он видимо обнуляется при каждом новом вызове Формы 2 из Формы 1.


КОД: (Форма 3 — расчёт)

int w = Form1->k;
for(int z = 0; z < w; z ++)
{
C1[z] = ((-6 * me * pow (c, 2))*(Form1->alfa[z])*alfgts)/(((Form1->alfa[z])/(Form1->ksia[z]))+(alfgts/ksigts));
C2[z] = ((45 * pow(h, 2) * (Form1->alfa[z]) * alfgts * ((1/(2*((alfgts/ksigts)/((Form1->alfa[z])/(Form1->ksia[z]))+1)))+(1/(2*(((Form1->alfa[z])/(Form1->ksia[z]))/(alfgts/ksigts)+1)))))/(32*pow(M_PI, 2)*me));

b1 = 1 + 4*C2[z]/(3*C1[z]*pow(Form1->r0[z],2));
b2 = Form1->q[z]*Form1->r0[z];
B[z] = 6*C1[z]*exp(b2)*b1/(Form1->q[z]*pow(Form1->r0[z], 7));

RichEdit1->Lines->Insert(0, "" + FloatToStr(C1[z]));
RichEdit1->Lines->Insert(1, "" + FloatToStr(C2[z]));
RichEdit1->Lines->Insert(2, "" + FloatToStr(B[z]));

}

Заранее благодарен.

Отредактировано Велес — 21/11/2003, 21:07
exp
Отправлено: 21.11.2003, 21:59


Мастер участка

Группа: Участник
Сообщений: 304



Ага, кажется просек.
Насколько понимаю, RichEdit1->Lines->Insert(i,...) заменяет значения i-той строки, вот и получается, что ты выводишь в одни строки РичЭдита свою информацию, которая с каждым проходом цикла затирается на новую.
Попробуй RichEdit->Lines->Add(...); smile.gif

Вернуться в Вопросы программирования в C++Builder