Приложение 1. Программа оценки химической обстановки




«Программа оценки химической обстановки при аварии со СДЯВ» предназначена для прогнозирования возможных последствий аварии на объекте экономики и оценки химической обстановки в случае возникновения такой аварии.

Программа выполнена в среде Borland C++ Builder 3.0 и работает под управлением ОС Microsoft Windows 9x. Программа обладает дружественным интуитивно-понятным интерфейсом и не нуждается в каком-либо дополнительном обучении для работы с ней (предполагается, что пользователь обладает навыками работы в графической среде ОС Microsoft Windows 9x).

В зависимости от задаваемых пользователем параметров (тип, количество, способ хранения СДЯВ, вертикальная устойчивость атмосферы, скорость ветра, тип местности, расстояние до объекта экономики) выполняется расчет глубины, ширины и площади возможной зоны заражения, время подхода зараженного воздуха к объекту, продолжительность поражающего действия СДЯВ. Пересчет всех параметров выполняется «на лету», результаты оценки химической обстановки можно сохранить в текстовый файл.

Текст программы:

// Программа оценки химической обстановки при аварии со СДЯВ

// Автор: студент группы ИП-2-94 Яковлев Дмитрий

// Прогамма разработана в среде Borland C++ Builder 3.0

 

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

#include <math.h>

#include <vcl/dstring.h>

#include <stdlib.h>

#include <stdio.h>

// Описания глобальных переменных и таблиц рассчета коэффициентов

// (все значения взяты из методички ОЦЕНКА ХИМИЧЕСКОЙ ОБСТАНОВКИ для выполнения

// практической работы по теме 1.6 )

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)

{

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);

}

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: