void inc_cur_cont(void) - увеличивает знначение cur_cont на 1;
void cur_cont_into_z(void) - обнуляет cur_cont:
void b_t(unsigned int t) - приравнивает begin_t к t;
void dmaxmin(unsigned int t) - корректирует максимальные и минимальные значения простоя самолета.
class Gen {
unsigned int time,
cont,
max_cont_t,
min_cont_t,
par_c[6500],
g_cont,
g_cont_t,
nonuse_time;
void maxmincont(unsigned t)
{
if(max_cont_t<t)
max_cont_t=t;
else if(min_cont_t>t)
min_cont_t=t;
}
void gen_cont(void);
public:
Gen() {time=0;cont=0;g_cont=0;
min_cont_t=max_cont_t=0;
g_cont_t=0;nonuse_time=0;
par_c[0]=0;}
void take_off_cont(void);
unsigned get_cont(void){return cont;}
unsigned get_time(void){return time;}
unsigned get_max(void){return max_cont_t;}
unsigned get_min(void){return min_cont_t;}
unsigned get_nt(void){return nonuse_time;}
unsigned get_g_cont(void){return g_cont;}
unsigned get_g_cont_t(void){return g_cont_t;}
void genarator(Fifo_a &fa,Aircraft *ac);
};
inline void Gen::gen_cont(void)
{time++;par_c[cont]=time;cont++;par_c[cont]=time;cont++;}
void Gen::genarator(Fifo_a &fa,Aircraft *ac)
{
unsigned char i=0;
gen_cont();
while(i<5){
if(time==ac[i].get_b()&&ac[i].get_f()==(unsigned char)1){
fa.write_f(i);
ac[i].write_f(0);
}
i++;
}
}
void Gen::take_off_cont(void)
{
unsigned i=0;
nonuse_time+=time-par_c[0];
if(g_cont==0)max_cont_t=min_cont_t=nonuse_time;
g_cont++;
g_cont_t=time;
maxmincont(time-par_c[0]);
cont--;
while(i<cont){
par_c[i]=par_c[i+1];
i++;
}
}
Класс Gen используется для создания объекта, который генерирует контейнеры и управляет самолетами:
time - переменная используется для хранения значения модельного времени;
cont - значение текущего количества контейнеров на складе;
max_cont_t,min_cont_t - максимальное и минимальное время нахождения контейнера на складе;
par_c[6500] - массив из 6500 элементов используется для хранения значения времени поступления на склад каждого контейнера;
g_cont - текущее количество взятых со склада контейнеров с начала моделирования;
g_cont_t - текущее время изъятия со склада последнего контейнера;
nonuse_time - сумма времени нахождения контейнеров на складе, включая время их погрузки;
void maxmincont(unsigned t) - корректирует значения max_cont_t и min_cont_t, сравнивая их с временем t;
void gen_cont(void) - данная функция записывает в конец массива 2 контейнера и увеличивает time на 1.Для каждого контейнера записывается время его поступления на склад в массив par_c ;
Конструктор класса устанавливает в 0 переменные time,max_cont_t,min_cont_t,cont,g_cont,nonuse_time, а также элемент массива par_c[0].
void take_off_cont(void) - функция берет один контейнер со склада для погрузки.Берется контейнер, который прибыл на склад раньше всех.
Работа функции.
К переменной nonuse_time прибавляется время простоя погружаемого контейнера.Если с начала моделирования контейнеры еще не отгружались,то max_cont_t=min_cont_t=nonuse_time.
Далее увеличивается на 1 число погруженных и запоминается время погрузки контейнеров. Вызывается функция maxmincont. В качестве параметра функции - простой контейнера. Затем уменьшается количество складируемых контейнеров на 1. Передвигаем информацию в массиве par_c о всех складируемых контейнерах на 1 элемент в направлении 0-го элемента начиная с 1-го элемента.
unsigned get_cont(void) - возвращает значение cont;
unsigned get_time(void) - возвращает значение time;
unsigned get_max(void),unsigned get_min(void) - возвращают значения переменных max_cont _t и min_cont_t;
unsigned get_nt(void) - возвращает значение nonuse_time;
unsigned get_g_cont(void) - возвращает значение g_cont;
unsigned get_g_cont_t(void) - возвращает значение g_cont_t.
Функция void genarator(Fifo_a &fa,Aircraft *ac) отводит память под счетчик i, вызывает функцию gen_cont. Для каждого из 5 самолетов сравнивается модельное время с временем прилета самолета, если он находится в полете. Если времена совпадают, то самолет ставится в очередь на обслуживание и у него изменяется флаг состояния.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.