Skip to content

Имитация работы морского порта. Задание повышенной сложности процедурное программирование 1 семестр

Notifications You must be signed in to change notification settings

Andriano2323/Seaport_model

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Морской порт

Постановка задания

Задание № 150 "Морской порт" с сайта Е.Н. Каширской из файла "База заданий"

Ссылка на сайт с заданием: https://lizochekk.jimdofree.com/программирование/

Требуется создать компьютерную модель обслуживания потока заявок на разгрузку, поступающих от грузовых судов (сухогрузов и танкеров), прибывающих в морской порт.

Условие задачи

Условия.

  1. Грузовые суда прибывают в порт согласно расписанию, но возможны опоздания и досрочные прибытия.
  2. Расписание включает день и время прибытия, название судна, вид груза и его вес, а также планируемый срок стоянки в порту для разгрузки.
  3. Для разгрузки судов в порту используются три вида разгрузочных кранов, соответствующих трем видам грузов:
    • сыпучим грузам,
    • жидким грузам,
    • контейнерам.
  4. Число разгрузочных кранов каждого вида ограничено, так что поступающие заявки на разгрузку одного вида груза образуют очередь.
  5. Длительность разгрузки судна зависит от вида и веса его груза, а также некоторых других факторов, например, погодных условий.
  6. Любой дополнительный (сверх запланированного срока) день стояния судна в порту (из-за ожидания разгрузки в очереди или из-за задержки самой разгрузки) влечет за собой выплату штрафа (например, 2 тыс. у.е. за каждый дополнительный день простоя судна).
  7. При моделировании прибытия судов отклонение их от расписания рассматривается как случайная величина с равномерным распределением в некотором интервале (например, от -2 до 9 дней).
  8. Еще одной случайной величиной, изменяющейся в фиксированном диапазоне (например, от 0 до 12 дней), является время задержки окончания разгрузки судна по сравнению с обычным (зависящим только от вида груза и его веса).
  9. Цель моделирования работы морского порта – определение для заданного расписания прибытия судов минимально достаточного числа кранов в порту, позволяющего уменьшить штрафные суммы.
  10. Период моделирования – месяц, шаг моделирования – 1-3 дня.
  11. В параметры моделирования следует включить расписание прибытия судов, количество кранов каждого вида, диапазоны разброса случайных величин (отклонения от расписания прибытия и отклонения от обычного времени разгрузки), а также шаг моделирования.
  12. Визуализация моделируемого процесса должна предусматривать показ очередей у разгрузочных кранов, приход судов в порт и их отход после разгрузки, но визуализация не является обязательной.
  13. Должен быть показан также список произведенных разгрузок, в котором указывается:
    • название разгруженного судна,
    • время его прихода в порт,
    • время ожидания в очереди на разгрузку,
    • время начала разгрузки
    • продолжительность разгрузки.
  14. По окончании моделирования должна быть выведена итоговая статистика:
    • число разгруженных судов,
    • средняя длина очереди на разгрузку,
    • среднее время ожидания в очереди,
    • максимальная задержка разгрузки,
    • средняя задержка разгрузки,
    • общая сумма выплаченного штрафа.

Структурная схема работы

  1. Генерация файла введенной длины, содержащего расписание прибывающих в порт кораблей
  2. Построчное чтение данных из файла и запись информации в динамический массив
  3. Моделирование работы портов с целью определения минимального штрафа за простой кораблей при минимальном количестве портов
  4. Запись наилучшего варианта
  5. Визуализация очереди в определенный период времени для лучшей модели
  6. Запись в текстовый файл информации о разгруженных кораблях
  7. Запись в текстовый файл итоговой статстики

Особенности выполения работы

  1. Для удобства работы с данными о каждом корабле создан класс Ships, который позволяет записать всю необходимую информацию о корабле и выполнить промежуточные расчеты, например для вычисления задержки прибытия и разгрузки судна Данные обо всех кораблях хранятся в динамическом массиве (векторе), состоящем из объектов класса Ships
  2. Для удобства работы с кораблями в очереди создана структура Ships_in_queue, которая, также как и класс Ships позволяет хранить информацию о кораблях, находящихся в очереди
  3. Данные расписания генерируются (алгоритм описан в generator.cpp, функция generator())
  4. Выходные данные (разгруженные корабли, итоговая статистика) записываются в файл statics.txt

Использование и запуск

Проект разрабатывался в IDE CLion, используя компилятор MinGW и средство автоматизации сборки программного обеспечения из исходного кода CMake

Для запуска программы:

  1. Клонировать репозиторий

В терминале Windows открыть необходимое расположение, ввести команду:

git clone https://github.com/Shkityrk/Seaport.git

Загрузить проект с репозитория GitHub

https://github.com/Shkityrk/Seaport.git
  1. Для правильного отображения выбрать необходимый способ кодировки.

Для этого необходимо открыть файл main.cpp, закомментировать/раскомментировать необходимую строку:

Для работы в Visual Studio:

setlocale(LC_ALL, "Russian");

В остальных случаях:

SetConsoleOutputCP(CP_UTF8);
  1. Запустить файл main.cpp и выполнить сборку проекта
  2. В консоли последовательно ввести 1, 2, 3 (это важно, так как увеличение количества операций просмотра очереди влечет изменение итоговой статистики). После этого ввести любой символ для завершения работы программы
  3. В папке data появятся два файла - input.txt(генерированный набор кораблей с данными) и statics.txt(файл со списком разгруженных за время моделирования кораблей и итоговой статистикой)

About

Имитация работы морского порта. Задание повышенной сложности процедурное программирование 1 семестр

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 89.1%
  • C 9.5%
  • CMake 1.4%