AIR PORT моделювання (ПОТРІБНА ДОПОМОГА У C )

A

allurz

Guest
Огляд
Ваше завдання полягатиме в імітації прильотів і вильотів в аеропорту, в той час, послідовність до одного 24-годинного періоду.Аеропорт має п злітно-посадочні смуги.Моделювання роботи в одиницях часу в одну хвилину.Перебіг однієї хвилини, літаки можуть увійти в систему, вони можуть землі, вони можуть зняти, або може відбутися збій.Ваша програма повинна стежити за літаками, призначити літаків злітно-посадочні смуги, виконання злетів і посадок і відстежувати стан кожного літака.
Програма командного рядка
Командного рядка для програми буде
C:> N аеропорту літаки вихідний
де N є цілим числом даючи злітно-посадочних смуг в аеропортах, літаках це текстовий файл, який містить основні матеріали для моделювання і перегляду тексту вихідного файлу.
Увага!Мені буде перевіряти тільки програми, які реалізують командного рядка, і подача, проконсультуйтеся C книги / допомогти в цьому.
Злітно-посадочні смуги
Злітно-посадочні смуги повинні бути пронумеровані 0 ..N-1.Кожен повинен мати дві черги пов'язані з нею, по одному на літаках очікуванні зльоту і один для очікування літака з землею.Кожен злітно-посадочної смуги може бути використано не більше однієї площини в кожну хвилину.Іншими словами, кожна злітно-посадочної смуги може бути використаний для злітної ході одиницю часу, для посадки під час одиницю часу, але не для обох сторін.Винятки становлять екстрених посадок і посадок аварії.Це пояснюється нижче.
Вхідний файл
У першому рядку введення в літаках містить починаючи часу, який визначається як два цілих даючи початковий годину і хвилину.Кожний наступний рядок визначає
а) збільшення часу
б) заяву на площині ввести зльоту чергу,
с) заяву на площині ввести цільові черги, або
д) клопотання на отримання статусу площині.
Вони описані в такий спосіб:
Якщо вхідна рядок містить символ " " як перший (і це буде єдиний) символ, приріст час на одну хвилину і робити операції, описані нижче, щоб ручка початку наступної хвилини.
Вам не потрібно встановлювати злітної чергу визначається рядки, такі як наступні
Т-З 1297 13 10 231
T (завжди великої літери) вказує, що це зльоту.Поєднання рядок КВ і цілих 1297 задає авіакомпанію і номер рейсу.Номерами 13 і 10 вказують, що цей політ повинен був виїхати до 13:10 (або 1:10 вечора).Кожна площину запитуючої злітної повинні бути негайно поміщені в чергу на ВПП, навіть якщо час до вказаного часу вильоту.Нарешті, число 231 означає кількість пасажирів на літаку.
Інформація про посадку літака задається
Л Ю 1297 13 10 15 18 231
Тут L (завжди заголовна літера) вказує, що ця посадка.Поєднання SW та 1297 вказати авіакомпанію і номер рейсу.Номерами 13 і 10 вказують на час цей літак спочатку планувалося досягти.Число 15 означає кількість хвилин, поки цей літак буде знаходитися в аеропорту, і готові до землі.Іншими словами, літак знаходиться в діапазоні.У цьому випадку літак не можуть бути віднесені до посадки черзі до 15 хвилин.Число 18 означає кількість тимчасових одиниць палива літак пішов.Ви можете вважати, що це число щонайменше таким, як кількість одиниць часу, поки літак досягне в аеропорту, і ви можете вважати обидва числа є позитивними.Нарешті, 231 указується кількість пасажирів.
Прохання перевірити статус визначається рядки, такі як
З 1297 SW
Вхідний формат буде правильним.
Зверніть увагу, що посадка літака стала відома програма, поки вони ще деяку кількість хвилин їзди від аеропорту.Вони не можуть бути віднесені до злітно-посадочної смуги до досягнення ними в аеропорту.Злітна літаки відразу ж призначені на злітно-посадковій смузі, коли вони читали програмою.
Обробкою вхідних кінці з кінця вхідного файлу.Після цього програма повинна приріст час Текстовий хвилин, з використанням злітно-посадкових смуг, як описано нижче, до злітно-посадочної смуги черзі порожні.
Що робити під час кожною хвилиною
На початку кожної хвилини (після є читання), перш ніж читати більше введення, ваша програма повинна
а) зменшують кількість хвилин, що залишився палива для всіх посадку літаки,
б) зменшують кількість хвилин до літака досягає аеропорту при посадці літака hasn T досягла ще аеропорту, і
с) для літаків в очікуванні зльоту або посадки чергу, приріст кількості хвилин літак чекали.Потім перевірити на посадку літаки, які тільки що досягли аеропорту (хвилин до прибуття нещодавно досягнутої 0).Призначення кожного з них для ВПП, вибираючи злітно-посадочної смуги з найменшими літаки очікування використовувати його в кожному конкретному випадку.Перерва зв'язку шляхом вибору ВПП з меншим числом (наприклад, злітно-посадкова смуга 1 до 2 смуги).
Після того, як все це робиться, то програма повинна вивести вміст черг (робити це допоможе вам налагодження).Формат цього висновок повинен бути чимось на зразок: Під час запуску час 12:56
Злітно-посадкова смуга 0
Злітна черги:
З 1876 року в черзі на 1 хвилину.
А.Е. 4379 в черзі на 1 хвилину.
Посадка черги:
<empty>
Злітно-посадкова смуга 1
Злітна черги:
Амер 179 в черзі на 1 хвилину.
Посадка черги:
USAir 977 в черзі на 1 хвилину.1 хвилина палива залишаються.
Далі (ще на початку одиницю часу), програма повинна виконати наступні дії з метою:
1.Почнемо для літаків, які повинні аварії.Будь-який посадку літаки, які мають негативний число одиниць палива, що залишилися впаде в одиницю часу (хвилини).Кілька літак може впасти в будь-яку хвилину.Всякий раз, коли є аварії, вона займає 5 хвилин, щоб усунути наслідки заворушень і видавати проїзні талони для всіх пасажирів на площині (Пам'ятайте, що всі виживуть), так що ні злітно-посадочної смуги може бути використаний протягом цього часу.Час, за який авіакатастрофи вважається як 1 до 5 хвилин.Для кожної аварії, висновок має бути у формі
З 1297 з 231 пасажирами зазнав аварії о 13:25.
Очікуваний час прибуття 13:01.
Відзначимо, що протягом 5 хвилин після авіакатастрофи, більше літаків може призвести до збою, продовживши час до злітно-посадочної смуги можуть використовуватися.
2.Якщо ні аварії літака в одиницю часу, і якщо там hasn т було збою в останні 5 хвилин, а потім подивитися на аварійну посадку.Аварійною посадки потрібно, коли літак 0 одиниць палива залишилося.У цьому випадку літак повинен впасти на її встановлене злітно-посадочної смуги, і тому що це надзвичайна ситуація, всі злітно-посадочні смуги очищені і ніякі інші злітно-посадочної смуги може бути використаний в ході цієї хвилини.За наявності кількох екстрених посадок тільки перший з них можуть бути розміщені.Значення перше, в даному випадку, є надзвичайною літака на злітно-посадочної смуги з найменшим номером.При наявності більш ніж одного такого літака що вимагає аварійної посадки, вибирається один ближче до передньої частини черги.Для кожної аварійної посадки висновок повинен бути у формі
З 1297 з 231 пасажирами зробив аварійну посадку на злітно-посадочну смугу 13:23 на 2.
Очікуваний час прибуття 13:01.
3.Якщо не було ніяких аварій в останні 5 хвилин і немає жодних екстрених посадок в цю хвилину, потім керують нормальної злетів і посадок.При виборі між злетів і посадок, просто вибрати літак, який був у черзі довше за всіх.Перерва зв'язку шляхом вибору очікуванні літака з землею.
Всякий раз, коли площина фактично використовує злітно-посадочної смуги повідомлення виводяться у вихідний файл.Для літаків, які приземляються, висновок має бути у формі
З 1297 з 231 пасажирами приземлився на злітно-посадочної смуги 0 в 13:17.
Очікуваний час прибуття 13:01.
Для літаків, які злітають, висновок має бути у формі
З 1297 злетів на злітно-посадочної смуги 0 в 13:17.
Очікуваний час вильоту було 13:01.
Останнє, що треба робити кожен раз, коли пристрої для обробки вхідних даних.(Зверніть увагу, що порядок обробки означає, що кожен літак буде перебувати в черзі на злітній смузі не менше однієї хвилини.) Для кожної площини бажаючі зльоту, вибрати злітно-посадочної смуги.Як і раніше, вибирати злітно-посадочної смуги з найменшою кількістю літаків чекає його використовувати, і порвати, вибравши найнижчий злітно-посадочної смуги номер.За кожен літак, що йде в діапазон, додати площини в список літаків, які знаходяться в зоні, але ще не в аеропорту (і, отже, не вступили в посадці черги).Перед тим як зробити одну з них, однак, по-перше перевірити, якщо літак вже знаходиться в системі (тієї ж авіакомпанії та номер рейсу).Вихідна повідомлення про помилку і ігнорувати цей рядок введення, якщо воно є.Повідомлення має бути просто
Помилка: З 1297 вже знаходиться в системі.
Для заявок на площині статус, програма має спочатку перевірити, щоб переконатися, що політ був введений ще.Якщо ні, то вона повинна вихідний
Помилка: З 1297 не в системі.
і продовжуються до наступного запиту.В іншому випадку, результат буде залежати від поточного стану літака.Ось приклади, що показують статус усіх можливостей
Статус: З 1297 перебуває в діапазоні, і буде лежати в 13:23 або пізніше.
Статус: З 1297 перебуває в черзі на посадку на злітно-посадочної смуги 1, 12 хв від залишився палива
Статус: З 1297 ставиться в чергу на зліт по злітно-посадочної смуги 0.
Статус: З 1297 з 231 пасажирами вилетів о 13:23.
Статус: З 1297 з 231 пасажирами приземлився о 13:23.
Статус: З 1297 з 231 пасажирами здійснив аварійну посадку в 13:23.
Статус: З 1297 з 231 пасажирами аварії приземлився о 13:25.
Вихідний
Вищевикладене описує спільний вихід із системи.(Там повинна бути символом нового рядка після друку черзі злітно-посадочної смуги.) Приклади вхідних і вихідних будуть опубліковані найближчим часом на веб-сайті курсу.
Додаткові вимоги та пропозиції
Вкрай важливо, щоб ви почали цю задачу, створивши класи.Вам необхідно (як мінімум) класів для подання Take-Off площині приземлення літака, а злітно-посадкова смуга.
Підказка: всередині, так само тримати весь час як хвилини, замість годин і хвилин.Так, наприклад 13:01 буде 781.Тільки турбуватися про годинах і хвилинах, коли ви пишете на виході.
перерахування типів можуть допомогти вам з цим завданням.Знайти їх у вашому підручнику (и), якщо ви не знаємо, як використовувати.
Дон т використовувати чергу через необхідність усунення літаки з середини.Замість цього використовуйте список.
Ключові рішення вам необхідно зробити це як стежити за літаками.Звичайно, якщо ваша програма набуває статусу запиту, він Shouldn T повинні дивитися через всі черги, щоб знайти літак.Крім того, ваша програма повинна відслідковувати літаки на різних стадіях: на відстані, але ще не приземлився, посадка в черзі на злітну черги, і т.д. Ви повинні бути обережні, щоб уникнути двох різних об'єктів, що представляють тій же площині.Один зі способів зробити це просто тримати авіакомпанії та номери рейсів у різні списки і черги, зберігаючи при цьому фактичні літаків в окрему структуру (або структури).Другий спосіб зробити це зберегти покажчиків (динамічно виділяється) площині об'єктів в різних списків і черг.Там буде тільки один площину об'єкта для кожного літака, але, можливо, буде кілька покажчиків до нього.Небезпеки з використанням кількох покажчиків на один об'єкт, є те, що не ясно, хто є власником цього об'єкта (і, отже, має право видалити його).Це не є особливою проблемою тут.
Якщо ви вирішите використовувати стрілки, то вам потрібно бути трохи обережним з синтаксисом.Наприклад, якщо у вас є STD:: Список <TakeoffPlane*> чергу, як і черги літаків на злітно-посадочної смуги в очікуванні зльоту і якщо клас має TakeoffPlane приріст функції члена хвилини додати хвилини очікування, а потім Код
для (STD:: Список <TakeoffPlane*>:: Iterator queue.begin P = (); P! = queue.end (); P)
((* P) -> increment_minute ();)
будуть робити операцію для кожного чекає зльоті літака.* P доступ до змісту по списку (який є дороговказом) і -> наступний покажчик на об'єкт і застосовує функції-члена.
Нарешті, якщо ви передаєте об'єкт потоку (Stream вхідних та вихідних потоків) у функцію, вона повинна пройти по посиланню!може будь-якої допомоги у цьому питанні.

 

Welcome to EDABoard.com

Sponsor

Back
Top