DZ4
/
project4.cpp
105 строк · 5.5 Кб
1//Создать имитационную модель "остановка маршрутных
2//такси". Необходимо вводить следующую информацию:
3//среднее время между появлениями пассажиров на остановке в разное время суток, среднее время между появлениями маршруток на остановке в разное время суток,
4//тип остановки(конечная или нет).Необходимо определить : среднее время пребывание человека на остановке,
5//достаточный интервал времени между приходами маршруток, чтобы на остановке находилось не более N людей
6//одновременно.Количество свободных мест в маршрутке
7//является случайной величиной.
8#include <iostream>9#include <cstdlib>10#include <ctime>11
12using namespace std;13
14// Глобальные переменные
15int passengers = 0; // Количество пассажиров на остановке16int waitingTimeTotal = 0; // Общее время ожидания пассажиров17int busesArrivalTime = 0; // Время до прибытия следующей маршрутки18int busCapacity = 20; // Вместимость маршрутки19
20// Функция для генерации случайного числа в заданных пределах
21int getRandomNumber(int min, int max) {22return rand() % (max - min + 1) + min;23}
24
25// Функция для имитации прибытия пассажиров
26void simulatePassengerArrival(int averageTime) {27int arrivalTime = getRandomNumber(1, averageTime);28
29// Обновляем количество пассажиров и суммарное время ожидания30passengers++;31waitingTimeTotal += arrivalTime;32
33// Выводим информацию о прибытии пассажира34cout << "Пассажир прибыл. Время до следующего прибытия: " << arrivalTime << " минут.\n";35}
36
37// Функция для имитации прибытия маршрутки
38void simulateBusArrival(int averageTime, int maxPassengers) {39int arrivalTime = getRandomNumber(1, averageTime);40
41// Обновляем время до прибытия следующей маршрутки42busesArrivalTime = arrivalTime;43
44// Выводим информацию о прибытии маршрутки45cout << "Маршрутка прибыла. Время до следующей маршрутки: " << arrivalTime << " минут.\n";46
47// Проверяем, есть ли свободные места в маршрутке48int freeSeats = busCapacity - passengers;49if (freeSeats < maxPassengers) {50cout << "В маршрутке осталось мало свободных мест, она уезжает.\n";51}52else {53passengers = 0;54cout << "Пассажиры сели в маршрутку. Уехала.\n";55}56}
57
58int main() {59srand(time(0)); // Инициализация генератора случайных чисел60
61int averagePassengerArrivalTime, averageBusArrivalTime, maxPassengers;62char stopType;63
64// Ввод пользовательских данных65cout << "Введите среднее время между прибытием пассажиров на остановку (в минутах): ";66cin >> averagePassengerArrivalTime;67
68cout << "Введите среднее время между прибытием маршруток на остановку (в минутах): ";69cin >> averageBusArrivalTime;70
71cout << "Введите тип остановки (к - конечная, н - не конечная): ";72cin >> stopType;73
74cout << "Введите максимальное количество пассажиров на остановке одновременно: ";75cin >> maxPassengers;76
77// Цикл имитации работы остановки78while (true) {79// Имитация прибытия пассажиров80simulatePassengerArrival(averagePassengerArrivalTime);81
82// Проверка наличия маршрутки на остановке83if (busesArrivalTime == 0) {84simulateBusArrival(averageBusArrivalTime, maxPassengers);85}86else {87busesArrivalTime--;88cout << "Времени до следующей маршрутки: " << busesArrivalTime << " минут.\n";89if (busesArrivalTime == 0) {90simulateBusArrival(averageBusArrivalTime, maxPassengers);91}92}93
94// Подсчёт среднего времени пребывания пассажиров на остановке95float averageWaitingTime = (float)waitingTimeTotal / passengers;96cout << "Среднее время пребывания пассажиров на остановке: " << averageWaitingTime << " минут.\n";97
98// Завершение работы программы, если на тип "конечная" и маршрутка уехала99if (stopType == 'к' && busesArrivalTime == 0) {100break;101}102}103
104return 0;105}