void simulation(ostream &ofs)
{
Gen g;
Aircraft ac[5];
Fifo_a fa;
unsigned xx[600];
unsigned r=0;
normt(xx);
ac[3].write_140();
ac[4].write_140();
while(g.get_time()<6000){
unsigned char ar;
unsigned int norm_t;
g.genarator(fa,ac);
while(fa.get_a()!=0){
ar=fa.take_off_f();
while(ac[ar].get_cur_cont()!=ac[ar].get_n_cont()){
if(g.get_cont()==0){
g.genarator(fa,ac);
if(g.get_time()>6000)break;
}
g.take_off_cont();
ac[ar].inc_cur_cont();
}
if(g.get_time()>6000) break;
norm_t=(unsigned)xx[r];
r++;
ac[ar].write_nt(g.get_time()-ac[ar].get_b());
ac[ar].inc_n();
ac[ar].dmaxmin(g.get_time()-ac[ar].get_b());
ac[ar].cur_cont_into_z();
ac[ar].b_t(g.get_time()+norm_t);
ac[ar].write_f(1);
}
}
ofs<<endl<<" _________ Информация__о__самолетах ___________"<<endl<<
" Количество_вылетов Простой Max._простой Мin._простой "<< endl ;
r=0;
while(r<5){
ofs<<(r+1)<<" "<<(int)ac[r].get_n()<<
" "<<(ac[r].get_nu()/ac[r].get_n())<<
" "<<ac[r].get_max_t()<<" "<<
ac[r].get_min_t()<<endl;
r++;
}
ofs<< " ________ Информация о контейнерах ___________"<<endl<<
" Простой Мax.простой Min.простой "<<endl<<
" "<<(g.get_nt()/(float)g.get_g_cont())<<" "<<g.get_max()<<" "<<g.get_min()<<
endl<<endl;
}
Функция simulation моделирует работу аэропорта в течение 100ч.(6000мин.) и записывает результаты моделирования в файл "test10.txt".
Работа функции:
Создается массив хх для хранения 600 нормально-распределенных случайных величин.Переменная r - счетчик.Вызывом функции nornt(xx), заполняется массив хх. 4-му и 5-му самолету установливается грузоподъемность в 140 контейнеров.
while(g.get_time()<6000){
unsigned char ar;
unsigned int norm_t;
g.genarator(fa,ac);
while(fa.get_a()!=0){
ar=fa.take_off_f();
while(ac[ar].get_cur_cont()!=ac[ar].get_n_cont()){
if(g.get_cont()==0){
g.genarator(fa,ac);
if(g.get_time()>6000)break;
}
g.take_off_cont();
ac[ar].inc_cur_cont();
}
if(g.get_time()>6000) break;
norm_t=(unsigned)xx[r];
r++;
ac[ar].write_nt(g.get_time()-ac[ar].get_b());
ac[ar].inc_n();
ac[ar].dmaxmin(g.get_time()-ac[ar].get_b());
ac[ar].cur_cont_into_z();
ac[ar].b_t(g.get_time()+norm_t);
ac[ar].write_f(1);
}
}
Данный цикл выполняется пока модельное время меньше 6000 мин.Внутри цикла отводится память под 2 переменные:
ar - индекс обслуживаемого самолета;
norm_t - переменная для хранения нормальной случайной величины.
Далее запускается функция g.generator(fa,ac).
while(fa.get_a()!=0){
ar=fa.take_off_f();
while(ac[ar].get_cur_cont()!=ac[ar].get_n_cont()){
if(g.get_cont()==0){
g.genarator(fa,ac);
if(g.get_time()>6000)break;
}
g.take_off_cont();
ac[ar].inc_cur_cont();
//g.genarator(fa,ac);
}
if(g.get_time()>6000) break;
norm_t=(unsigned)xx[r];
r++;
ac[ar].write_nt(g.get_time()-ac[ar].get_b());
ac[ar].inc_n();
ac[ar].dmaxmin(g.get_time()-ac[ar].get_b());
ac[ar].cur_cont_into_z();
ac[ar].b_t(g.get_time()+norm_t);
ac[ar].write_f(1);
}
Цикл продолжается до тех пор, пока очередь не пуста. Внутри цикла берется самолет из очереди на обслуживание и загружается, пока число загруженных контейнеров не будет равно его грузоподъемности . Если самолет загружен не полностью , а со склада взяты все контейнеры, то вызывается функция g.genаrator и производится проверка модельного времени. Если погрузка завершена, то проверяется модельное время , берется нормальное случайное число из массива xx и запоминается в переменной normt_t. Далее увеличивается время суммарного простоя и прибавляется 1 к количеству полетов данного самолета. Корректируется его максимальное и минимальное время простоя. Записывается время прилета на основе значения переменной norm_t и изменяется флаг состояния в 1.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.