Skip to content

Honsage/FairwaySearch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fairway Search

Fairway Search – мой курсовой проект в рамках дисциплины "Объектно-ориентированное программирование", написанный на языке C++. Представляет собой систему моделирования провода корабля по фарватеру, работающую в CLI формате.

Время создания: Май 2024.

Постановка задачи на разработку системы

Смоделировать работу системы, которая реализует решение задачи провода корабля по фарватеру. Система состоит из следующих элементов:

  • акватория;
  • корабль;
  • локатор глубины;
  • пульт управления со штурвалом.

Акватория имеет прямоугольную форму и разбита на квадраты. Для каждого квадрата задано значение его глубины. Этому разбиению по квадратам можно сопоставить матрицу (n x m). Где, n – количество строк, а m – количество столбцов. Значения n и m больше 10. Нумерация строк и столбцов начинается с 1. Первоначально корабль плывет вдоль первой строки квадратов и определяет глубину дна. Известно, что у фарватера есть только один вход. Корабль в рамках одного квадрата может развернуться влево или вправо, не более 90 градусов. Корабль по курсу движения может передвигаться в левую, в левую по диагонали, следующую, в правую по диагонали или в правую клетку. Локатор способен по курсу движения определить величину глубины в вышеперечисленных клетках. Для корабля дана минимально необходимая глубина. Основное направление курса движения от первой строки к строке n. Корабль на обратный курс не должен развернутся. Другими словами, не должен переместиться по ходу движения от клетки под номером строки i к строке под номером i-1. Всегда выбирается квадрат относительно квадрата расположения корабля, согласно его курсу движения, по максимуму глубины среди возможных квадратов, куда он может переместиться.

Система ищет фарватер и проводит корабль по него. Фарватер считается пройденным, если корабль достиг клетку с номером строки n. Надо отметить, что такой фарватер всегда существует.

Акватория моделируется посредством прямоугольной целочисленной матрицы. Элемент матрицы соответствует квадрату, а его значение глубине квадрата. У корабля есть характеристика курса движения, координаты расположения и минимальная допустимая глубина.Время функционирования системы разбита на интервалы и это моделируется посредством тактов. В рамках каждого такта элементы системы выполняют предопределенные действия. Инициирование действий моделируется посредством запросов (сигналов). Элементы системы моделируются посредством следующих объектов:

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

Написать программу, реализующую следующий алгоритм:

  1. Вызов метода объекта «система» build_tree_objects ( ).
    1.1. Построение дерева иерархии объектов. Характеристики объектов вводятся.
    1.1.1. Установка связей (сигнал-обработчик) и приведение части объектов в состоянии готовности, для обеспечения ввода данных и настройки системы.
    1.1.2. Выдача сигнала объекту чтения для ввода данных.
    1.1.3. Отработка операции загрузки данных.
    1.2. Установка связей сигналов и обработчиков между объектами.

  2. Вызов метода объекта «система» exec_app( ).
    2.1. Приведение всех объектов в состояние готовности.
    2.2. Цикл для обработки такта функционирования системы.
    2.2.1. Выдача необходимых сигналов.
    2.2.2. Отработка взаимодействия объектов и необходимых алгоритмов.
    2.3. После прохода корабля по фарватеру завершить работу.

Исходное расположение корабля координата (1,1) и курс направлен вдоль первой строки.

Все приведенные сигналы и соответствующие обработчики должны быть реализованы. Запрос от объекта означает выдачу сигнала. Все сообщения на консоль выводятся с новой строки.

В набор поддерживаемых команд добавить команду «SHOWTREE» и по этой команде вывести дерево иерархии объектов системы с отметкой о готовности и завершить работу системы (программы).

Описание программной реализации

Система представляет собой модель, где время разбито на дискретные интервалы. В каждом такте объекты выполняют предопределенные действия, взаимодействуя через механизм сигналов и обработчиков. Это обеспечивает четкое разделение ответственности и контролируемый поток выполнения.

Основу архитектуры составляет иерархическое дерево объектов во главе с корневым объектом System. Все компоненты наследуются от базового класса Base, который реализует паттерн Observer с механизмом сигналов и слотов. Вместо прямых вызовов методов объекты испускают сигналы, которые направляются к соответствующим обработчикам через заранее установленные связи. Это обеспечивает слабую связанность между компонентами.

Акватория моделируется прямоугольной матрицей, где каждый элемент содержит значение глубины. Корабль обладает координатами, направлением движения и минимальной допустимой глубиной. Локатор исследует клетки по курсу движения, пульт управления анализирует данные и принимает решения, а объект корабля выполняет перемещения.

Работа системы делится на три фазы: инициализация и загрузка данных, поиск входа в фарватер вдоль первой строки, и непосредственно прохождение фарватера с выбором направления движения на основе максимальной доступной глубины. Алгоритм гарантирует, что корабль всегда движется в сторону последней строки, не возвращаясь назад.

Архитектура поддерживает команды пользователя, включая SHOWTREE для вывода структуры системы. Вся информация о пройденном пути накапливается и выводится по завершении моделирования, образуя последовательность координат фарватера от входа до выхода.

Тестирование работы системы

Пример входных данных:

20 20 15
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
10 10 11 12 20 13 10 10 10 25 10 10 10 10 10 10 10 10 10 10
10 10 10 35 10 10 10 27 19 10 10 10 10 10 10 10 10 10 10 10
10 10 10 36 10 10 10 10 30 31 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 32 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 25 21 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 17 27 21 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 33 10 36 37 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 32 33 34 33 10 10 10 10 10 10 10 10 10
10 10 10 10 10 35 10 20 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 36 10 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 37 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 38 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 40 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 41 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 43 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 44 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 45 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 46 10 10 10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 47 10 10 10 10 10 10 10 10 10 10 10 10
SHOWTREE

Результат работы системы:

Ready to work
Fairway (1, 10) (2, 10) (3, 9) (4, 9) (5, 10) (6, 9) (7, 9) (8, 9) (9, 9) (10, 8) (11, 7) (12, 8) (13, 8) (14, 8) (15, 8) (16, 8) (17, 8) (18, 8) (19, 8) (20, 8)
System is ready
 Reader is ready
 Display is ready
 Aquatory is ready
 Vessel is ready
  ControlBoard is ready
  Locator is ready
Turn off the ATM

About

Fairway search simulation system

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published