rival (Tanker * t) {i;
// Перевіряємо, чи є вільний термінал = FirstAvail (); (i! = -1)// є, стразу ставимо танкер на навантаження
{[i] = t; _serve [i] = get_uniform (t-> median, t-> offset); [i] -> state = 5;
}// ні, ставимо танкер в чергу
{_length + +; * ptr = new ListNode (t, NULL); (queue == NULL) queue = ptr; ListAdd (queue, ptr);> ; state = 4;
}
}
Port :: Complete (int i) {
// Відправляємо завантажений танкер до буксира
((Tug *) t) -> Arrival_coast (serving [i]); _serve [i] = -1; [i] = NULL; (queue == NULL) return; p>
// Черга не порожня, ставимо на звільнився термінал новий танкер [i] = queue-> Data (); _serve [i] = get_uniform (serving [i] -> median, serving [ i] -> offset); [i] -> state = 5; = queue-> Next (); _length -;
}
Port :: run () {k;
// Перевірка завершення обслуговування і інкремент часу перебування для всіх// танкерів, що знаходяться під контролем порту (int i = 0; i 0) { serving [i] -> minutes + +; to_serve [i] -;} (to_serve [i] == 0) Complete (i);
} * ptr = queue; (ptr! = NULL) {> Data () -> minutes + +; = ptr-> Next ();
}
// Запис статистики - 1 раз на годину ((total +1)% 60 == 0) {= (total +1)/60; (q_loading, "% d n",
}
}
Port :: Print () {("У черзі на навантаження знаходяться% d танкерів n", q_length); ("Зайняті вантаженням% d терміналів n", Busy ()); (int i = 0; i type);
}
Port :: FirstAvail () {(int i = 0; i
}
Port :: Busy ()// обчислення поточного кількості зайнятих терміналів
{k = 0; (int i = 0; i
}
Port :: putTug (Tug * a) {= a;
}
Лістинг програми файл random.h
# include
# include
# include get_exp (float mu) {
// генератор випадкових чисел, розподілених
// експоненціальноr_num; float root, right; _num = rand ();// отримання випадкового целогочісла = ((float) r_num)/(RAND_MAX +1);// проекція на інтервал (0; 1) =-log (1-right)/mu;// обчислення значення зворотної функції (root);
}
get_uniform (int a, int b...