Сборник задач и упражнений по курсу "Моделирование" (Событийный подход. Программное моделирование), страница 5

public:

Fifo_a(){a=5;f[0]=0;f[1]=1;f[2]=2;f[3]=3;f[4]=4;}

unsigned char get_a(void){return a;}

void write_f(unsigned char i)

{

f[a]=i;

a++;

}

unsigned char take_off_f(unsigned char i=0);

};

void Fifo_a::move(unsigned char i)

{while(i < a){f[i]=f[i+1];i++;}}

unsigned char Fifo_a::take_off_f(unsigned char i)

{

unsigned char j;

if(f[i]>2){

j=i;

while(j<a&&f[j]>2)

j++;

if(j<a)

i=j;

}

j=f[i];

move(i);

a--;

return j;

}

Класс Fifo_a создает очередь для обслуживания самолетов с заданным приоритетом. Переменная a  хранит текущее количество самолетов в очереди. Массив f из 5 элементов хранит a индексов самолетов, которые стоят в очереди (0 - первый самолет , 1 - второй  и т.д). Конструктор класса заносит 5 самолетов на обслуживание по порядку и присваивает переменной а значение 5:

void move (unsigned char i) - затирает i-й элемент очереди, сдвигая очередь по направлению к голове на 1 элемент, начиная с (i+1)-го:

unsigned char get_a(void) - возвращает текущее количество самолетов в очереди;

void write_f(unsigned char i) - заносит идентификатор самолета i в очередь на обслуживание;

unsigned char take_off_f(unsigned char i=0) - возвращает идентификатор самолета, стоящего в очереди на i-м месте(по умолчанию i равно 0) с заданным приоритетом , т.е. если на i-й позиции стоит идентификатор "тяжелого" самолета и в очереди, начиная с (i+1)-й позиции, находится хотя бы один идентификатор 80-контейнерного самолета, то возвращается идентификатор этого самолета.Самолет из очереди удаляется.

class  Aircraft {

unsigned int begin_t,

nonuse_t,

min_t,

max_t;

unsigned char f,

n,

n_cont,

cur_cont;

public:

Aircraft() {nonuse_t=0;f=0;min_t=max_t=0;n=0;n_cont=80;cur_cont=0;begin_t=0;return;}

unsigned char get_f(void){return f;}

unsigned char get_n(){return n;}

void write_f(unsigned char i){f=i;}

void write_140(){n_cont=140;}

void write_nt(unsigned t){nonuse_t+=t;}

unsigned get_b(void){return begin_t;}

void inc_n(void){if(n==0)max_t=min_t=nonuse_t;n++;}

unsigned get_max_t(){return max_t;}

unsigned get_min_t(){return min_t;}

unsigned get_nu(void){return nonuse_t;}

unsigned get_n_cont(void){return n_cont;}

unsigned get_cur_cont(void){return cur_cont;}

void inc_cur_cont(void){ cur_cont++;}

void cur_cont_into_z(void){cur_cont=0;}

void b_t(unsigned int t){begin_t=t;}

void dmaxmin(unsigned int t){ if(max_t<t) max_t=t;else if(min_t>t)min_t=t;}

};

Класс Aircraft задает представление самолета:

begin_t - эта переменная сохраняет время последнего прилета на аэродром для погрузки;

nonuse_t - суммарное время простоя за все рейсы, которые самолет сделал с начала моделирования;

min_t,max_t - содержат минимальное и максимальное время простоя самолета;

f - флаг состояния самолета : 0 - самолет находится в очереди,1 - самолет в полете;

n - количество полетов;

n_cont - грузоподъемность самолета в контейнерах;

cur_cont - текущая загруженность самолета, находящегося на обслуживании;

Конструктор класса обнуляет переменные : nonuse_t, f, min_t, max_t, n, cur_cont, begin_t и устанавливает грузоподъемность самолета в 80 контейнеров:

unsigned char get_f(void) - возвращает флаг состояния самолета;

unsigned char get_n() - возвращает количество полетов самолета;

void write_f(unsigned char i) - функция устанавливает флаг самолета в i (i = 0 или i = 1);

void write_140() - устанавливает грузоподъемность самолета в 140 контейнеров;

void write_nt(unsigned t) - прибавляет к переменной nonuse_t значение t;

unsigned get_b(void) - возвращает время прилета самолета;

void inc_n(void) - увеличивает количество полетов на 1, если оно равно 0, то max_=min_t=nonuse_t;

unsigned get_max_t(),unsigned get_min_t() - функции возвращают минимальное и максимальное время простоя;

unsigned get_nu(void) - возвращает значение nonuse_t;

unsigned get_n_cont(void) - возвращает грузоподъемность самолета;

unsigned get_cur_cont(void) - возвращает значение cur_cont.;