//Функция конструтор
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//Функция вывода рассчетных значений
void setLabel(float what, TLabel *a, char *b)
{
int i,l;
AnsiString bff;
bff = FormatFloat("0.00", what);
i = a->Caption.Pos(": ");
l = a->Caption.Length() - i;
a->Caption = a->Caption.Delete(i+2, l);
a->Caption = a->Caption + bff + b;
}
// Функции пересчета коэффициентов и значений
void setTI()
{
ti = timeOF[Form1->ComboBox1->ItemIndex][Form1->ComboBox4->ItemIndex];
}
void setD()
{
D = prop[Form1->ComboBox1->ItemIndex][0]*prop[Form1->ComboBox1->ItemIndex][1];
D = D*60/100000.0;
}
void setk1k2k6()
{
k1 = atm[0][Form1->ComboBox2->ItemIndex];
k2 = atm[1][Form1->ComboBox2->ItemIndex];
k6 = atm[2][Form1->ComboBox2->ItemIndex];
}
void setk5V()
{
k5 = velocity[Form1->ComboBox3->ItemIndex];
V = Form1->ComboBox3->ItemIndex + 1;
}
void setk3()
{
k3 = store[Form1->ComboBox4->ItemIndex];
}
void setk4()
{
k4 = place[Form1->ComboBox4->ItemIndex];
}
// Функция вычисления параметров зоны заражения, время подхода зараженного
// воздуха и время поражающего действия СДЯВ
void setZone()
{
float h,w,s,t1,t2;
G = Form1->Edit2->Text.ToInt();
h = k2*k3*k4*34.2*pow(pow(G/(D*V), 2), 1/3.0);
setLabel(h, Form1->Height, " м");
w = k1*h;
setLabel(w, Form1->Width, " м");
s = 0.5*h*w;
setLabel(s, Form1->Square, " м2");
L = Form1->Edit1->Text.ToInt();
t1 = L/(k6*V);
setLabel(t1, Form1->timeA, " c");
t2 = (ti*k5);
setLabel(t2, Form1->timeB, " час");
}
// Контроль ввода количеста СДЯВ и расстояния до объекта экономики
// (разрешен ввод только целых чисел) и пересчет параметров
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
char c[4];
strcpy(c,Edit1->Text.c_str());
int i=0;
while(c[i]!=0){
if((c[i]>'9')||(c[i]<'0'))
strcpy(c+i,c+i+1);
else
i++;
}
Edit1->Text=c;
if (Edit1->Text != "")
setZone();
}
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
char c[4];
strcpy(c,Edit2->Text.c_str());
int i=0;
while(c[i]!=0){
if((c[i]>'9')||(c[i]<'0'))
strcpy(c+i,c+i+1);
else
i++;
}
Edit2->Text=c;
if (Edit2->Text != "")
setZone();
}
// Функции вызывающие функции пересчета коэффициентов, в зависимости от
// действий пользователя
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
setD();
setTI();
setZone();
}
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
setk1k2k6();
setZone();
}
void __fastcall TForm1::ComboBox3Change(TObject *Sender)
{
setk5V();
setZone();
}
void __fastcall TForm1::ComboBox4Change(TObject *Sender)
{
setk3();
setTI();
setZone();
}
void __fastcall TForm1::ComboBox5Change(TObject *Sender)
{
setk4();
setZone();
}
// Начальная инициализация всех значений
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->ItemIndex=0;
ComboBox2->ItemIndex=0;
ComboBox3->ItemIndex=0;
ComboBox4->ItemIndex=0;
ComboBox5->ItemIndex=0;
setTI();
setD();
setk1k2k6();
setk5V();
setk3();
setk4();
setZone();
}
//Обработка выхода из программы
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (Application->MessageBox("Вы действительно хотите закончить работу с
программой?", "Завершение работы", MB_YESNO + MB_ICONQUESTION +
MB_DEFBUTTON1) == IDYES)
exit (0);
}
// Сохранение результатов работы программы
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Save->Execute()){
FILE*output = fopen(Save->FileName.c_str(),"w");
if(output == NULL){
Application->MessageBox("Ошибка!", "Ошибка записи файла",
MB_OK+MB_ICONERROR);
return;
}
fprintf(output, "%s\n", Form1->Height->Caption);
fprintf(output, "%s\n", Form1->Width->Caption);
fprintf(output, "%s\n", Form1->Square->Caption);
fprintf(output, "%s\n", Form1->timeA->Caption);
fprintf(output, "%s\n", Form1->timeB->Caption);
fclose(output);
}
}