Страница: 4/5
TForm1 *Form1;
int G,L,V;
float k1,k2,k3,k4,k5,k6,D,ti;
// Таблица: вертикальная устойчивость атмосферы
float atm[3][3] = {{0.03, 0.15, 0.8},{1, 1/3.0, 1/9.0},{2, 1.5, 1.5}};
// Таблица рассчета k5 в зависимости от скорости ветра
float velocity[6] = {1, 0.7, 0.55, 0.43, 0.37, 0.32};
// Таблица рассчета k3 в зависимости от вида хранилища
float store[2] = {1, 2/3.0};
// Таблица рассчета k4 в зависимости от вида местности
float place[2] = {1, 1/3.0};
// Таблица рассчета времени испарения СДЯВ в зависимости от типа СДЯВ и вида
// хранилища
float timeOF[4][2] = {{1.3, 22},{1.2, 20},{1.3, 20},{1.4, 23}};
// Таблица: токсические свойства СДЯВ
float prop[4][2] = {{0.2, 360},{0.01, 60},{0.05, 10},{0.4, 50}};
//Функция конструтор
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)
Реферат опубликован: 4/04/2006