Файл: Курсовая работа по дисциплине Технология программирования.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.02.2024

Просмотров: 43

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Количество полос : 3
2-е направление

Интервал времени между прибытием машин : 1 - 3 сек

Интервал времени задержки машин на перекрёстке : 2 - 4 сек

Количество полос : 1
3-е направление

Интервал времени между прибытием машин : 4 - 6 сек

Интервал времени задержки машин на перекрёстке : 2 - 12 сек

Количество полос : 5
4-е направление

Интервал времени между прибытием машин : 5 - 10 сек

Интервал времени задержки машин на перекрёстке : 6 - 7 сек

Количество полос : 2

Результаты моделирования:
1-е направление

Количество машин, проехавших через перекрёсток = 71

по 1-ой полосе : 25

по 2-ой полосе : 24

по 3-ой полосе : 21

Среднее время ожидания в пробке = 12 сек

Среднее время ожидания на светофоре = 3 сек
2-е направление

Количество машин, проехавших через перекрёсток = 89

по 1-ой полосе : 89

Среднее время ожидания в пробке = 3 мин 2 сек

Среднее время ожидания на светофоре = 2 сек

3-е направление

Количество машин, проехавших через перекрёсток = 35

по 1-ой полосе : 13

по 2-ой полосе : 9

по 3-ой полосе : 7

по 4-ой полосе : 4

по 5-ой полосе : 2

Среднее время ожидания на светофоре = 4 сек
4-е направление

Количество машин, проехавших через перекрёсток = 23

по 1-ой полосе : 13

по 2-ой полосе : 10

Среднее время ожидания в пробке = 1 сек

Среднее время ожидания на светофоре = 3 сек

Вывод
В некоторых случаях суммарное количество машин, проехавших по каждой полосе, не равно общему количеству машин, проехавших по данному направлению. Это можно объяснить тем, что программа считает усреднённые значения по всем итерациям. А при подсчёте среднего значения происходит утечка дробных значений, которая и приводит к погрешности.

Заключение


При выполнении курсовой работы были использованы такие приёмы ООП как композиция, наследование, использование статических данных-элементов при наследовании. В программе реализованы все требования, перечисленные в разделе «Постановка задачи».

Пожелания по дальнейшему развитию проекта:

-Для того, чтобы моделирование перекрёстка со светофором было более реалистично при времени моделирования равном 24 часа и более, нужно предложить пользователю возможность задания разной интенсивности потока машин в разное время суток.

-Предоставить пользователю возможность сымитировать препятствие на какой-либо полосе движения путём увеличения времени задержки машины на этой полосе. Например, это может быть яма или неровность, на преодоление которой требуется некоторое количество времени, которое и предлагается задать пользователю.


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

Список использованной литературы


  1. Шахмаметов Р.Г. «Программирование на языках высокого уровня. Методические указания» – Новосибирск: кафедра АСУ НГТУ, 2006

  2. Подбельский В.В. «Язык С++» ― Москва: Финансы и статистика, 2004

  3. Б.Страуструп. «Язык программирования С++. Специальное издание» ― Москва: издательство Бином, 2004


Листинг


#include "random.h"

#include

#include

#include

#include

#include

#include

#include "Form1.h"
using namespace std;
class Simulation{

public:

Simulation();

Simulation(int, int*, int*, int*, int*, int*, int, int, int);//конструктор

void RunSimulation();

//статические переменные используются для того, чтобы из значения, заданные в начале,

//были доступны элементам класса Mashina (когда создаётся элемент класса Mashina,

//то эти переменные не инициализируются, а используются значения, инициализированные

//при создании объекта класса Simulation в функции main)

int N; //количество итераций программы

static int **Pol; //номер полосы

static int *kolPol; //количество полос для движения
static int **countE; // [N][4] - хранит кличество машин, проехавших через перекрёсток, для каждой итерации

static int **srTimeOjOch; // [N][4] среднее время ожидания в пробке по каждому из 4-х направлений по каждой из N-ти итераций

static int **srTimeOjSv;

protected:

RandomNumber rnd;

static int TGlobal;

static int time; // длина моделируемого периода работы

static int *arrivalLow; //диапазон времени между приходами машин

static int *arrivalHigh;

static int *delayLow; //диапазон времени задержки машин на перекрёстке

static int *delayHigh;

static int TimeGreen; //время горения разрешающего сигнала светофора (в секундах)

static int TimeRed; //время горения запрещающего сигнала светофора (в секундах)

//данные-элементы для хранения результатов по всем 4-м направлениям

static int *countElem;

static int **ojOch; //время ожидания в очереди (т.е. в случае, когда при прибытии машины на перекрёсток, предыдущая машина ещё не покинула перекрёсток)

static int **ojSv; //время ожидания при запрещающем сигнале светофора

private:

int SrTimeOjOch(int h); //возвращает среднее время ожидания в пробке.

//В качестве аргумента функции передаётся номер направления

int SrTimeOjSv(int h); //возвращает среднее время ожидания на светофоре.
};
class Mashina : public Simulation{

public:

Mashina();

Mashina *pHead; // указатель на первый элемент списка

Mashina *pPrev; // указатель на последний элемент списка

Mashina *next; // указатели на следующий

Mashina *pred; //и на предыдущий элементы списка

void addToList(int tprib, int nPol, int napr, int iter); //функция добавки элемента в список

//tprib - время прибытия, nPol - номер полосы, napr - номер направления, iter - номер итерации

int KolOstMash(int); //в качестве параметра функции передаётся время пибытия очередной машины.

//Функция возвращает количество машин, время отбытия которых (Totb) больше, чем время прибытия очередной машины (tprib)

//(т.е. количество машин, ещё не уехавших с перекрёстка в момент прибытия очередной машины)

private:

int Tprib; //время прибытия

int TojPer; //время ожидания на перекрёстке

int TojOch; //время ожидания в очереди (т.е. в случае, когда при прибытии машины на перекрёсток, предыдущая машина ещё не покинула перекрёсток)

int TojSv; //время ожидания при запрещающем сигнале светофора

int Totb; //время отбытия с перекрёстка

};
//===================================================

//=====реализация класса Simulation==================

//===================================================
int Simulation::TGlobal = 0;

int Simulation::time = 0;

int *Simulation::kolPol = new int[4];

int *Simulation::countElem = new int[4];

int *Simulation::arrivalLow = new int[4];

int *Simulation::arrivalHigh = new int[4];

int *Simulation::delayLow = new int[4];

int *Simulation::delayHigh = new int[4];

int Simulation::TimeGreen = 0;

int Simulation::TimeRed = 0;
int **Simulation::Pol = new int* [4];

int **Simulation::ojOch = new int* [4];

int **Simulation::ojSv = new int* [4];
int **Simulation::srTimeOjOch = new int*() ;

int **Simulation::srTimeOjSv = new int*() ;

int **Simulation::countE = new int*() ;
//-----------------------------------------------------------------------------------

Simulation::Simulation()

{

}

Simulation::Simulation(int t, int *k, int *al, int *ah, int *dl, int *dh, int tg, int tr, int n)

{

int i,j, ii, jj;

N = n;

time = t;

TimeGreen = tg;

TimeRed = tr;

for (i=0; i<4; i++)

{

kolPol[i] = k[i];

arrivalLow[i] = al[i];

arrivalHigh[i] = ah[i];

delayLow[i] = dl[i];

delayHigh[i] = dh[i];

}
for (int i = 0; i < 4; i++)

{

Pol[i] = new int [1000];

ojOch[i] = new int [1000];

ojSv[i] = new int [1000];

}

srTimeOjOch = new int* [N] ;

srTimeOjSv = new int* [N] ;

countE = new int* [N] ;

for (int i = 0; i < N; i++)

{

srTimeOjOch[i] = new int [4];

srTimeOjSv[i] = new int [4];

countE[i] = new int [4];

}

}

//-----------------------------------------------------------------------

void Simulation::RunSimulation(){

Mashina *M;

for (int iter=0; iter
for (int j=0; j<4; j++) // моделирование по j-му направлению

{

M = new Mashina[kolPol[j]];

TGlobal = 0;

countElem[j]=0;

int tprib = rnd.Random(arrivalHigh[j] - arrivalLow[j] + 1) + arrivalLow[j] ;
while (tprib <= time*60)

{

//поиск списка с минимальным количеством не уехавших машин в очереди

int min = M->KolOstMash(tprib);

int min_i = 0;

for (int i = 0; i < kolPol[j]; i++)

if ((M+i)->KolOstMash(tprib) < min)

{

min = (M+i)->KolOstMash(tprib);

min_i = i;

}

(M + min_i)->addToList(tprib, min_i+1, j, iter);

tprib = TGlobal + rnd.Random(arrivalHigh[j] - arrivalLow[j] + 1) + arrivalLow[j] ;

}
countE[iter][j] = countElem[j]; //сбор статистики по каждой из итераций

srTimeOjOch[iter][j] = SrTimeOjOch(j);

srTimeOjSv[iter][j] = SrTimeOjSv(j);

}

return;

}
//среднее время ожидания в очереди по h-му направлению

int Simulation::SrTimeOjOch(int h)

{

int sum = 0, i;

int sr;

for (i = 0 ; i < countElem[h] ; i++)

sum = sum + ojOch[h][i];

sr = sum/countElem[h];
return sr;

}
int Simulation::SrTimeOjSv(int h)

{

int sum = 0, sr, i;

for (i = 0 ; i < countElem[h] ; i++)

sum = sum + ojSv[h][i];

sr = sum/countElem[h];

return sr;

}
//=============================================================================

//--------------------реализация класса Mashina--------------------------------

//=============================================================================
Mashina::Mashina(){

pHead = NULL;

pPrev = NULL;

}
//реализация функции добавления

void Mashina::addToList(int tprib, int nPol, int napr, int iter)

{

int i, j;

Mashina *temp = new Mashina; //создается временный элемент
if(pHead == NULL) //если это первый элемент, то

{

temp->pred = NULL; //обнуляем указатель на предшествующий элемент т.к. его нет

temp->next = NULL; //то же самое с последующим элементом

pHead = temp; //"голова" указывает на созданный элемент
temp->Tprib = tprib;
temp->TojPer = rnd.Random(delayHigh[napr] - delayLow[napr] + 1) + delayLow[napr];

temp->TojOch = 0; //Время ожидания в очереди равно 0, т.к. это первая машина

//расчёт времени ожидания на запрещающем сигнале светофора

int PeriodSv = temp->Tprib / (TimeGreen + TimeRed); //количество периодов смены сигнала светофора, произошедших к моменту прибытия машины

// Green,Red, Green,Red, Green,Red, ...

int Tpr = temp->Tprib - (TimeGreen + TimeRed)*PeriodSv; // время прибытия относительно последнего завершившегося полного периода смены сигнала светофора
if ((napr == 0) || (napr == 1))

{

if (Tpr <= TimeGreen) //если во время прибытия машины горел разрешающий сигнал светофора

temp->TojSv = 0;

else{ //иначе, если во время прибытия машины горел запрещающий сигнал светофора

int Tkr = Tpr - TimeGreen; // время, сколько уже горел запрещающий сигнал светофора к моменту прибытия машины

temp->TojSv = TimeRed - Tkr;

}

}

else

{

if (Tpr <= TimeGreen)

temp->TojSv = TimeGreen - Tpr;

else temp->TojSv = 0;

}

//конец рассчёта
temp->Totb = temp->Tprib + temp->TojPer + temp->TojSv;

}

else //если не первый, то

{

pPrev->next = temp; //предыдущий указывает на него

temp->Tprib = tprib;

temp->TojPer = rnd.Random(delayHigh[napr] - delayLow[napr] + 1) + delayLow[napr]; //время ожидания на перекрёстке
//рассчёт времени ожидания в очереди

if (pPrev->Totb > temp->Tprib ){ // если время отбытия предыдущей машины больше времени прибытия данной машины

//т.е. данная машина прибыла, а предыдущая ещё не отбыла, то

temp->TojOch = pPrev->Totb - temp->Tprib; //время ожидания в очереди

}

else

{

temp->TojOch = 0;

}

//расчёт времени ожидания на запрещающем сигнале светофора

int PeriodSv = (temp->Tprib + temp->TojOch) / (TimeGreen + TimeRed); //количество периодов смены сигнала светофора, произошедших к моменту прибытия машины

// Green,Red, Green,Red, Green,Red, ...

int Tpr = (temp->Tprib + temp->TojOch) - (TimeGreen + TimeRed)*PeriodSv; // время прибытия относительно последнего завершившегося полного периода смены сигнала светофора
if ((napr == 0) || (napr == 1))

{

if (Tpr <= TimeGreen) //если во время прибытия машины горел разрешающий сигнал светофора

temp->TojSv = 0;

else{ //иначе, если во время прибытия машины горел запрещающий сигнал светофора

int Tkr = Tpr - TimeGreen; // время, сколько уже горел запрещающий сигнал светофора к моменту прибытия машины

temp->TojSv = TimeRed - Tkr;

}

}

else

{

if (Tpr <= TimeGreen)

temp->TojSv = TimeGreen - Tpr;

else temp->TojSv = 0;

}

//конец рассчёта
temp->Totb = temp->Tprib + temp->TojPer + temp->TojOch + temp->TojSv; //время отбытия с перекрёстка

}
TGlobal = temp->Tprib;
Pol[napr][countElem[napr]] = nPol;

ojOch[napr][countElem[napr]] = temp->TojOch;

ojSv[napr][countElem[napr]] = temp->TojSv;
temp->next = NULL; //последующего элемента нет (добавляем же в конец)

temp->pred = pPrev; //указываем на предыдущий элемент, на который «нацелен» pPrev

pPrev = temp; //а теперь хвостовой элемент указывает на последний (добавленный)

countElem[napr]++; //увеличиваем счетчик элементов в списке

return;

}
int Mashina::KolOstMash(int tprib){

int k = 0;

Mashina *pTemp = pHead; //создается временный элемент

if (pHead) //если список не пуст, то

while(pTemp != NULL) //пока врем. элем. не будет указывать на хвост

{

if (pTemp->Totb > tprib) k++;

pTemp = pTemp->next; //и переходим на следующий за ним элем.

}

return k;

}

//Спецификация класса RandomNumber

//Класс RandomNumber – класс датчиков случайных чисел

# include

// эти числа используются для создания случайного числа

// из текущего seed-значения

const unsigned long maxshort = 65536L ;

const unsigned long multiplier = 1194211693L ;

const unsigned long adder = 12345L ;

class RandomNumber

{

private:

unsigned long randSeed; // текущее seed-значение

public:

RandomNumber () ; // конструктор

// функция, которая возвращает целое случайное число,

// равномерно распределенное в диапазоне [ 0, n -1 ]

unsigned short Random ( unsigned long n ) ;

} ;
RandomNumber :: RandomNumber ()

{

randSeed = time ( 0 ) ; // seed-значение, заданное

// посредством функции time ( )

}

unsigned short RandomNumber :: Random ( unsigned long n )

{

randSeed = multiplier * randSeed + adder ; // новое seed-значение

// возврат целого случайного числа в диапазоне [ 0, n -1 ]

return (unsigned short) ( (randSeed >> 16 ) % n ) ;

}

//Спецификация класса Form1

#pragma endregion

//запустить моделирование

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

int t, tg, tr, n;

int *k = new int[4];

int *al = new int[4];

int *ah = new int[4];

int *dl= new int[4];

int *dh = new int[4];

n = System::Convert::ToInt32(textBox9->Text);

t = System::Convert::ToInt32(textBox1->Text);

tg = System::Convert::ToInt32(textBox7->Text);

tr = System::Convert::ToInt32(textBox8->Text);
k[0] = System::Convert::ToInt32(textBox2->Text);

al[0] = System::Convert::ToInt32(textBox3->Text);

ah[0] = System::Convert::ToInt32(textBox4->Text);

dl[0] = System::Convert::ToInt32(textBox5->Text);

dh[0] = System::Convert::ToInt32(textBox6->Text);
k[1] = System::Convert::ToInt32(textBox14->Text);

al[1] = System::Convert::ToInt32(textBox13->Text);

ah[1] = System::Convert::ToInt32(textBox12->Text);

dl[1] = System::Convert::ToInt32(textBox11->Text);

dh[1] = System::Convert::ToInt32(textBox10->Text);
k[2] = System::Convert::ToInt32(textBox19->Text);

al[2] = System::Convert::ToInt32(textBox18->Text);

ah[2] = System::Convert::ToInt32(textBox17->Text);

dl[2] = System::Convert::ToInt32(textBox16->Text);

dh[2] = System::Convert::ToInt32(textBox15->Text);
k[3] = System::Convert::ToInt32(textBox24->Text);

al[3] = System::Convert::ToInt32(textBox23->Text);

ah[3] = System::Convert::ToInt32(textBox22->Text);

dl[3] = System::Convert::ToInt32(textBox21->Text);

dh[3] = System::Convert::ToInt32(textBox20->Text);
ofstream data("data.txt");

data<
data<
data<
data<
for (int i =0; i<4; i++)

{

data<
data<
data<
data<

data<
}

data.close();
Simulation S(t, k, al, ah, dl, dh, tg, tr, n);

S.RunSimulation();

label10->Visible = true;
for (int h=0; h<4; h++)

{

int i, j, sr=0, srsv=0, sum=0;
//рассчёт среднего количества машин, проехавших через переурёсток (за N итераций)

int kolmash[4];

for (i=0; i
sum += S.countE[i][h];

kolmash[h] = sum/S.N;

//расчёт среднего количества машин, проехавших по каждой полосе, максимум - 10 полос

int **kolMash = new int*[S.N]; //

for ( i = 0 ; i < S.N ; i++)

kolMash[i] = new int[10];

for ( i = 0 ; i < S.N ; i++)

for ( j = 1 ; j <= S.kolPol[h] ; j++)

kolMash[i][j] = 0;
for (int it=0; it
for (i = 0 ; i < S.countE[it][h] ; i++)

for (j = 1 ; j <= S.kolPol[h] ; j++)

if (S.Pol[h][i] == j) kolMash[it][j]++;

int summa[10];

for (i=0; i<10; i++)

summa[i]=0;
for (j = 1 ; j <= S.kolPol[h] ; j++)

for (int it=0; it
summa[j] = summa[j] + kolMash[it][j];
int kol[10];

for (i=0; i<10; i++)

kol[i]=0;
for (j = 1 ; j <= S.kolPol[h] ; j++)

kol[j] = summa[j]/S.N;
//рассчёт среднего времени ожидания в пробке (и на светофоре) за 10 итераций моделирования.

for (i=0; i
{

sr = sr + S.srTimeOjOch[i][h];

srsv = srsv + S.srTimeOjSv[i][h];

}

sr = sr/S.N;

srsv = srsv/S.N;

//

switch (h)

{

case 0: richTextBox1->Text =richTextBox1->Text+"Количество машин, проехавших через перекрёсток = " + kolmash[0] + "\r\n";break;

case 1: richTextBox2->Text =richTextBox2->Text+"Количество машин, проехавших через перекрёсток = " + kolmash[1] + "\r\n";break;

case 2: richTextBox3->Text =richTextBox3->Text+"Количество машин, проехавших через перекрёсток = " + kolmash[2] + "\r\n";break;

case 3: richTextBox4->Text =richTextBox4->Text+"Количество машин, проехавших через перекрёсток = " + kolmash[3] + "\r\n";break;

}
for ( i = 1 ; i <= S.kolPol[h] ; i++)

switch (h)

{

case 0: richTextBox1->Text = richTextBox1->Text + "по " + i + "-ой полосе : " + kol[i] + "\r\n";break;

case 1: richTextBox2->Text = richTextBox2->Text + "по " + i + "-ой полосе : " + kol[i] + "\r\n";break;

case 2: richTextBox3->Text = richTextBox3->Text + "по " + i + "-ой полосе : " + kol[i] + "\r\n";break;

case 3: richTextBox4->Text = richTextBox4->Text + "по " + i + "-ой полосе : " + kol[i] + "\r\n";break;

}
switch (h)

{

case 0: richTextBox1->Text=richTextBox1->Text+"\r\n";break;

case 1: richTextBox2->Text=richTextBox2->Text+"\r\n";break;

case 2: richTextBox3->Text=richTextBox3->Text+"\r\n";break;

case 3: richTextBox4->Text=richTextBox4->Text+"\r\n";break;

}
if (sr < 60)

switch (h)

{

case 0: richTextBox1->Text= richTextBox1->Text+"Среднее время ожидания в пробке = " + sr +" сек\r\n";break;

case 1: richTextBox2->Text= richTextBox2->Text+"Среднее время ожидания в пробке = " + sr +" сек\r\n";break;

case 2: richTextBox3->Text= richTextBox3->Text+"Среднее время ожидания в пробке = " + sr +" сек\r\n";break;

case 3: richTextBox4->Text= richTextBox4->Text+"Среднее время ожидания в пробке = " + sr +" сек\r\n";break;

}

if ((sr >=60) && (sr <3600)){

int min = sr/60;

int sec = sr - min*60;

switch (h)

{

case 0: richTextBox1->Text =richTextBox1->Text+"Среднее время ожидания в пробке = " + min +" мин "+ sec + " сек\r\n";break;

case 1: richTextBox2->Text =richTextBox2->Text+"Среднее время ожидания в пробке = " + min +" мин "+ sec + " сек\r\n";break;

case 2: richTextBox3->Text =richTextBox3->Text+"Среднее время ожидания в пробке = " + min +" мин "+ sec + " сек\r\n";break;

case 3: richTextBox4->Text =richTextBox4->Text+"Среднее время ожидания в пробке = " + min +" мин "+ sec + " сек\r\n";break;

}

}

if (sr >= 3600){

int chas = sr/3600;

int min = (sr - chas*3600)/60;

int sec = sr - chas*3600 - min*60;

switch (h)

{

case 0: richTextBox1->Text= "Среднее время ожидания в пробке = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 1: richTextBox2->Text= "Среднее время ожидания в пробке = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 2: richTextBox3->Text= "Среднее время ожидания в пробке = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 3: richTextBox4->Text= "Среднее время ожидания в пробке = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

}

}


if (srsv < 60)

switch (h)

{

case 0: richTextBox1->Text= richTextBox1->Text+"Среднее время ожидания на светофоре = " + srsv +" сек\r\n";break;

case 1: richTextBox2->Text= richTextBox2->Text+"Среднее время ожидания на светофоре = " + srsv +" сек\r\n";break;

case 2: richTextBox3->Text= richTextBox3->Text+"Среднее время ожидания на светофоре = " + srsv +" сек\r\n";break;

case 3: richTextBox4->Text= richTextBox4->Text+"Среднее время ожидания на светофоре = " + srsv +" сек\r\n";break;

}

if ((srsv >=60) && (srsv <3600)){

int min = srsv/60;

int sec = srsv - min*60;

switch (h)

{

case 0: richTextBox1->Text =richTextBox1->Text+"Среднее время ожидания на светофоре = " + min +" мин "+ sec + " сек\r\n";break;

case 1: richTextBox2->Text =richTextBox2->Text+"Среднее время ожидания на светофоре = " + min +" мин "+ sec + " сек\r\n";break;

case 2: richTextBox3->Text =richTextBox3->Text+"Среднее время ожидания на светофоре = " + min +" мин "+ sec + " сек\r\n";break;

case 3: richTextBox4->Text =richTextBox4->Text+"Среднее время ожидания на светофоре = " + min +" мин "+ sec + " сек\r\n";break;

}

}

if (srsv >= 3600){

int chas = srsv/3600;

int min = (srsv - chas*3600)/60;

int sec = srsv - chas*3600 - min*60;

switch (h)

{

case 0: richTextBox1->Text= richTextBox1->Text+"Среднее время ожидания на светофоре = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 1: richTextBox2->Text= richTextBox2->Text+"Среднее время ожидания на светофоре = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 2: richTextBox3->Text= richTextBox3->Text+"Среднее время ожидания на светофоре = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

case 3: richTextBox4->Text= richTextBox4->Text+"Среднее время ожидания на светофоре = " +chas+" ч "+ min +" мин "+ sec + " сек\r\n";break;

}

}

switch (h)

{

case 0: richTextBox1->Text=richTextBox1->Text+"\r\n";break;

case 1: richTextBox2->Text=richTextBox2->Text+"\r\n";break;

case 2: richTextBox3->Text=richTextBox3->Text+"\r\n";break;

case 3: richTextBox4->Text=richTextBox4->Text+"\r\n";break;

}

}

}

//

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

int t, tg, tr, n;

int *k = new int[4];

int *al = new int[4];

int *ah = new int[4];

int *dl= new int[4];

int *dh = new int[4];
ifstream data("data.txt");

if (data)

{

data>>n>>t>>tg>>tr;

for (int i=0; i<4; i++)

data>>k[i]>>al[i]>>ah[i]>>dl[i]>>dh[i];

textBox9->Text = System::Convert::ToString(n);

textBox1->Text = System::Convert::ToString(t);

textBox2->Text = System::Convert::ToString(k[0]);

textBox3->Text = System::Convert::ToString(al[0]);

textBox4->Text = System::Convert::ToString(ah[0]);

textBox5->Text = System::Convert::ToString(dl[0]);

textBox6->Text = System::Convert::ToString(dh[0]);

textBox7->Text = System::Convert::ToString(tg);

textBox8->Text = System::Convert::ToString(tr);

textBox14->Text = System::Convert::ToString(k[1]);

textBox13->Text = System::Convert::ToString(al[1]);

textBox12->Text = System::Convert::ToString(ah[1]);

textBox11->Text = System::Convert::ToString(dl[1]);

textBox10->Text = System::Convert::ToString(dh[1]);
textBox19->Text = System::Convert::ToString(k[2]);

textBox18->Text = System::Convert::ToString(al[2]);

textBox17->Text = System::Convert::ToString(ah[2]);

textBox16->Text = System::Convert::ToString(dl[2]);

textBox15->Text = System::Convert::ToString(dh[2]);
textBox24->Text = System::Convert::ToString(k[3]);

textBox23->Text = System::Convert::ToString(al[3]);

textBox22->Text = System::Convert::ToString(ah[3]);

textBox21->Text = System::Convert::ToString(dl[3]);

textBox20->Text = System::Convert::ToString(dh[3]);

}

data.close();

}

private: System::Void label7_Click(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void label30_Click(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void label2_Click(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void textBox2_TextChanged(System::Object^ sender, System::EventArgs^ e) {

}

private: System::Void pictureBox2_Click(System::Object^ sender, System::EventArgs^ e) {

}
//очистить экран

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

richTextBox1->Text ="";

richTextBox2->Text="";

richTextBox3->Text="";

richTextBox4->Text="";

}

};

}