курсовой
.docxМинистерство образования и науки РФ
федеральное государственное бюджетное образовательное учреждение высшего образования
«Омский государственный технический университет»
Факультет (институт) |
Факультет гуманитарного образования |
|
|
Кафедра |
Дизайн и технологии медиаиндустрии |
|
|
КУРСОВОЙ ПРОЕКТ (РАБОТА)
по дисциплине |
Операционные системы |
|
|
на тему |
Программная Linux модель железнодорожных перевозок между городами с использованием участков одноколейного движения. |
Пояснительная записка
Шифр проекта (работы) |
|
|
|
|
Студента (ки) |
|
|||||||||||||
|
|
|
|
фамилия, имя, отчество полностью |
|||||||||||||
|
|
|
Курс |
2 |
|
Группа |
ИСТ-151 |
|
|||||||||
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
Направление (специальность) |
|
|||||||||||||
|
|
|
09.03.02 |
Информационные системы и технологии |
|||||||||||||
|
|
|
код, наименование |
||||||||||||||
|
|
|
Руководитель |
доцент, к.т.н |
|||||||||||||
|
|
|
|
ученая степень, звание |
|||||||||||||
|
|
|
Флоренсов Александр Николаевич |
||||||||||||||
|
|
|
фамилия, инициалы |
||||||||||||||
|
|
|
Выполнил (а) |
|
|||||||||||||
|
|
|
|
дата, подпись студента (ки) |
|||||||||||||
|
|
|
К защите |
|
|||||||||||||
|
|
|
|
дата, подпись руководителя |
|||||||||||||
|
|
|
Выполнение и подготовка к защите КП (КР) |
Защита КП (КР) |
Итоговый рейтинг |
||||||||||||
|
|
|
|
|
|
||||||||||||
|
|
|
Проект (работа) защищен (а) с оценкой |
|
Омск 2017
ЗАДАНИЕ
Вариант №26
Разработать для Linux многопоточную программу моделирования использования и парковки личных автомобилей. В качестве исходных данных, конкретно упрощающих модель, считать число автомобилей и их владельцев равным 15. В моделируемом пространстве считать, что все владельцы живут в 3 соседних домах и площадки около каждого из этих домов позволяют парковать только по 2 автомобиля. Кроме того, в рассматриваемом микрорайоне есть платная парковка на 7 автомобилей. В программной модели отобразить случайность потребности использования автомобиля, который временно выезжает за пределы микрорайона и случайное его время пребывания там. Каждый владелец моделируется отдельной нитью. Отображается условным знаком – латинской буквой, например, позиция его автомобиля и его самого в представляющем изображении. Дома и площадки парковки изобразить с помощью дополнительных знаков, например, подчеркивания и вертикальной черты. Отображение в консольном окне на экране осуществляется с помощью управляющих последовательностей. Разместить изображения относительно равномерно в пределах экрана и изображать перемещение автомобилей изменением позиций отображающих символов. Изображение с помощью текстовых символов должно занимать большую часть консольного окна размером не менее 25 строк и 80 столбцов. Для правильного взаимодействия использовать семафоры и мьютексы.
ОПИСАНИЕ ПРОГРАММЫ
Данная программа изображает 3 города (A, B, C) и 9 дорог (1, 2, 3, 4, 5, 6, 7, 8, 9), которые соединяют города между собой. По дорогам ездят поезда – всего 4 штуки.
Для поездов создана специальная структура Train{}, которая содержит поля с информацией о движении поездов. Числовые данные этого движения описаны в функции init(). Именно в этой функции обозначено начало движение каждого поезда – первый поезд выезжает из города А, второй – из города В, а третий и четвертый – из города С. Набор путей записан в массивах, уникальных для каждого поезда.
Установка следующей линии на основе маршрута и направления реализуется с помощью функции setNextLine().
Так как центральная часть дорог имеет только одноколейное движение, то это тоже нужно обработать. Так дороги 7, 8, 9 являются дорогами с одноколейным движением (поезда на них могут двигаться только в одну сторону и при этом не могут столкнуться или пройти сквозь друг друга). Проверку на занятость пути (если путь занят, возвращает true иначе false) реализует функция isNextLineBusy().
Окончание движения по линии реализует функция endOfTheLine(), она же проверяет свободен ли путь при помощи предыдущей функции и снимает флаг ожидания.
Процедура рисования анимации движения и определения смены пути является важным этапом проектирования задачи. В зависимости от линии, на которой находится поезд, выбирается алгоритм вычисления следующей координаты (это реализуется при помощи оператора-переключателя switch; case – выбор дороги). При этом, по краям линии вызывается функция endOfTheLine - переход на следующий путь в маршруте. Или происходит разворот поезда в обратном направлении - это может произойти на путях 5, 6, 1, 2, 3, 4. Все это реализует функция moveTrain().
Для наглядного отображения города и поездов на нем необходима псевдографика (изображение, получаемое из совокупности текстовых символов). Она отрисована в функции printMap(). При этом, для вывода используются операторы и функции библиотеки ncurses, которую необходимо отдельно подключить в проект.
В функции main() отрисовывается карта изображения и запускается анимация движения поездов. Также для вывода данных необходимо войти curses-режим (команда screen = initscr()) и выйти из него (команда endwin()).
ТЕКСТ ПРОГРАММЫ
ВИД ОКНА ВЫПОЛНЯЕМОЙ ПРОГРАММЫ
В ходе выполнения программы на экран выводится окно с движущимися по нему элементами псевдографики (рис.1).
Рис.1 Выполнение программы
На экране отображена карта изображения - 3 города (А, В, С) и 9 дорог (отмечены пунктирными линиями и цифрами от 1 до 9). Анимация из 4 пережвигающихся звездочек – движение поездов по дорогам между городами А, В, С.
О РАЗРАБОТКЕ
Для разработки данной программы использовались текстовый редактор Gedit и компилятор gcc. Язык программирования – С. Также для использования множеств функций вывода подключена библиотека ncurses.
Ncurses («new curses») — библиотека, написанная на языках Си и Ада предназначенная для управления вводом-выводом на терминал, в том числе — задавать экранные координаты (в знакоместах) и цвет выводимых символов. Предоставляет программисту уровень абстракции, позволяющий не беспокоиться об аппаратных различиях терминалов и писать переносимый код.
Программа разработана на операционной системе Ubuntu (ОС, основанная на ядре Linux).
Файлом исходного кода служит текстовый файл main.c. Исполняемый файл – main.out.
Для создания исполняемого файла используется команда gcc main.c – lncurses –o main.out.
Для запуска исполняемого файла используется команда ./main.out. Альтернативой является перетаскивание исполняемого файла в область терминала с использованием манипулятора мышь.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
-
Флоренсов А. Н. Ф 73 Операционные системы для программиста; Учеб. пособие. Омск: Изд-во ОмГТУ, 2005. -240 с.
-
Флоренсов А.Н. Ф73 Операционные системы; Методические указания к лабораторным работам. Омск: Изд-во ОмГТУ, 2016 - 47 с.
-
Информационный портал Портал о программировании Code-Live.ru [Электронный ресурс]. (URL: https://code-live.ru/) (дата обращения 19.05.2017)