Розробка програми пошуку оптимальної туристичної путівки

Аналіз відомих підходів до побудови алгоритмів формування програми пошуку оптимальної туристичної путівки. Базові алгоритми, що будуть використані при розробці програми. Інтерфейс вхідних даних. Вибір мови програмування С++ та особливості реалізації.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 12.03.2016
Размер файла 585,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Вінницький національний технічний університет

Факультет інформаційних технологій та комп'ютерної інженерії

з дисципліни "Алгоритми та структури даних"

РОЗРОБКА ПРОГРАМИ ПОШУКУ ОПТИМАЛЬНОЇ ТУРИСТИЧНОЇ ПУТІВКИ

Федюк О.

Вихідні дані

Теоретичні відомості. Базові алгоритми. Мова програмування. Оцінка складності алгоритму. Реалізація програми. Виконання тестування роботи програми.

Зміст ПЗ до курсової роботи:

Індивідуальне завдання

Анотація

Зміст

Вступ

1. Теоретичні відомості до предметної області дослідження. Постановка задачі алгоритмізації та формування структур даних

1.1 Аналіз відомих підходів до побудови алгоритмів формування пошуку оптимальної туристичної путівки

1.2 Базові алгоритми, що будуть використані при розробці програми пошуку оптимальної туристичної путівки

1.3 Постановка задачі. Загальні підходи до поставлених завдань

2. АЛГОРИТМИ ТА СТРУКТУРИ ДАНИХ РОЗРОБКИ ПРОГРАМИ РЕАЛІЗАЦІЇ ПОШУКУ ОПТИМАЛЬНОЇ ТУРИСТИЧНОЇ ПУТІВКИ

2.1 Алгоритм побудови інтерфейсу вхідних даних програми пошуку оптимальної туристичної путівки

2.2 Алгоритм побудови програми пошуку оптимальної туристичної путівки

2.3 Алгоритм побудови інтерфейсу вихідних даних програми пошуку оптимальної туристичної путівки

3. РЕАЛІЗАЦІЯ ПРОГРАМИ СТВОРЕННЯ СИСТЕМИ ПОШУКУ ОПТИМАЛЬНОЇ ТУРИСТИЧНОЇ ПУТІВКИ

3.1 Вибір мови програмування та особливості реалізації

3.2 Реалізація базових алгоритмів

3.3 Реалізація програми пошуку оптимальної туристичної путівки мовою C++.

ВИСНОВКИ

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

Додатки (за необхідністю)

Анотація

Дана курсова робота присвячена розробці алгоритмів та структур даних для створення програми пошуку оптимальної туристичної путівки. Дана програма передбачає використання мови програмування C++ та інтегрованого середовища розробки Microsoft Visual Studio. Робота включає в себе дослідження та адаптацію базових алгоритмів та структур даних, використання класів та обробку текстової та числової інформації. Під час роботи були розроблені алгоритми відповідно до поставлених задач та реалізовано програмний продукт для пошуку найвигіднішої та найпривабливішої для користувача туристичної путівки. В результаті виконання курсової роботи отримано програмний засіб, працездатність і правильність роботи якого перевірено. Дана робота складається з вступу, трьох розділів та висновку.

Курсова робота містить 30 сторінок, 3 рисунки і 1 таблицю.

Зміст

Вступ

1. Теоретичні відомості до предметної області дослідження. Постановка задачі алгоритмізації та формування структур даних

1.1 Аналіз відомих підходів до побудови алгоритмів формування програми пошуку оптимальної туристичної путівки

1.2 Базові алгоритми, що будуть використані при розробці програми пошуку оптимальної туристичної путівки

1.3 Постановка задачі. Загальні підходи до поставлених завдань

2. Алгоритми та структури даних розробки програми реалізації пошуку оптимальної туристичної путівки

2.1 Алгоритм побудови інтерфейсу вхідних даних програми пошуку оптимальної туристичної путівки

2.2 Алгоритм побудови програми пошуку оптимальної туристичної путівки

2.3 Алгоритм побудови інтерфейсу вихідних даних програми пошуку оптимальної туристичної путівки

3. Реалізація програми створення системи пошуку оптимальної туристичної путівки

3.1 Вибір мови програмування та особливості реалізації

3.2 Реалізація базових алгоритмів

3.3 Реалізація програми пошуку оптимальної туристичної путівки мовою С++

Висновки

Список використаних джерел

Додаток А

Додаток Б

Вступ

Базові алгоритми та структури даних дуже широко застосовуються при розробці тих чи інших програмних продуктів, тому знання їх є необхідним для будь-якого програміста.

Пошук туристичної путівки, яка б повністю відповідала інтересам та очікуванням користувача, є важливою складовою при роботі онлайн сервісів для пошуку туру, тому використання даної системи пошуку є досить актуальним в наш час. Існує достатня кількість програм, які використовують різні методики пошуку туристичної путівки. Проте, на мою думку, усім їм властива деяка одноманітність у послідовності дій та невідповідність результатів із потребами користувача. Саме тому, проблема дослідження і вдосконалення програм на дану тематику - є актуальною.

Метою даної курсової роботи є - вивчення теоретичних підходів та отримання практичних навичок в адаптації, створенні та використанні алгоритмів та структур даних на прикладі розробки системи для пошуку туристичної путівки.

Відповідно меті визначено такі завдання:

· освоїти базові алгоритми і структури даних;

· проаналізувати особливості мови програмування С++ та інтегрованого середовища розробки програмного забезпечення Microsoft Visual Studio;

· створити програмний продукт, який дозволить забезпечити швидкий та ефективний пошук путівки;

· набути навички програмування на вищевказаній мові, виконати налагодження і тестування програмного забезпечення;

· представити результати курсової роботи і висновки, щодо використання в практичній діяльності базових алгоритмів та структур даних;

В першому розділі реалізовані відомості до предметної області дослідження, а також постановка задачі алгоритмізації та формування структур даних. Тобто аналіз відомих підходів, базові алгоритми, що будуть використані при розробці та постановка задачі.

В другому розділі реалізовані алгоритми побудови інтерфейсу вхідних даних, алгоритм побудови програми і алгоритм побудови інтерфейсу вхідних даних системи для пошуку оптимальної туристичної путівки.

В третьому розділі реалізована система для пошуку путівки, з використанням базових алгоритмів та структур даних. Крім того обґрунтований вибір мови програмування.

Виконана програма може бути використана для пошуку туристичної путівки згідно з потребами користувача .

На прикладі пошуку туристичної путівки можна наочно продемонструвати реалізацію базових алгоритмів та структур даних.

1. Теоретичні відомості до предметної області дослідження. Постановка задачі алгоритмізації та формування структур даних

1.1 Аналіз відомих підходів до побудови алгоритмів формування програми пошуку оптимальної туристичної путівки

Пошук оптимальної туристичної путівки є важливою задачею, яка потребує різних методів пошуку. На практиці знаходження оптимальної путівки використовується лише в туристичній індустрії. В першу чергу, це різного виду мобільні додатки, онлайн сервіси, завданням яких є вибір користувачем кінцевої туристичної путівки серед усіх запропонованих.

На сьогоднішній день існує не багато алгоритмів пошуку оптимальної туристичної путівки.

Загальний алгоритм пошуку оптимальної туристичної путівки зводиться до вибору користувачем кінцевої путівки серед запропонованих або надання програмі права вибору .

На початковому етапі загального алгоритму здійснюється пошук таких путівок, які задовольняють вимоги користувача. Вони подаються у вигляді послідовності, відсортованої за деяким параметром або декількома параметрами. Користувач може змінювати параметр сортування або власні вимоги, внаслідок чого зміниться послідовність. Далі користувач має можливість обрати найкращу для нього путівку або понадіятися на вибір програми.

Цей алгоритм пошуку є досить поширеним через свою простоту. Пошук здійснюється почергово. Якщо один з параметрів не співпадає, перевірка подальших параметрів не здійснюється.

Основний недолік даного алгоритму - користувач може так і не вибрати путівку у разі не ідентичності хоча би однієї із вимог користувача з характеристиками путівки.

Інший алгоритм схожий на попередній, але відрізняється однією суттєвою ознакою. При перевірці параметрів путівки не кожен параметр повинен задовольняти вимоги користувача. Таким чином, створюються основні та додаткові параметри, де додаткові майже не враховуються.

Недоліком даного алгоритму, по праву, можна вважати високу результативність пошуку, тобто збільшення кількості путівок, які не відповідають усім вимогам користувача, що в свою чергу змушує користувача суттєво напружуватися при виборі найкращої путівки.

Варто зазначити, що другий алгоритм було б краще використовувати, коли наслідком пошуку за першим алгоритмом є порожня множина або безальтернативний вибір, при якому користувач має лише один варіант.

Таким чином було прийнято рішення використовувати алгоритм, який поєднує в собі два алгоритми, що перераховувалися вище. Другий алгоритм буде застосовуватися, якщо на вимоги користувача не знайшлося путівки, або лише одна путівка.

1.2 Базові алгоритми, що будуть використані при розробці програми пошуку оптимальної туристичної путівки

Базові алгоритми та структури даних - важлива складова, при створенні будь-якого проекту. Вони є потужним інструментом у вирішенні багатьох поставлених задач у розробці програмного забезпечення. Вони дозволяють спростити код програми, оптимізувати його, та зробити більш лаконічним. Існують такі базові алгоритми та структури даних:

Масимв - впорядкований набір фіксованої кількості однотипних елементів, що зберігаються в послідовно розташованих комірках оперативної пам'яті, мають порядковий номер і спільне ім'я, що надає користувач, сукупність елементів одного типу даних, впорядкованих за індексами, які зазвичай репрезентовані натуральними числами, що визначають положення елемента в масиві. Масив може бути одновимірним (вектором), та багатовимірним (наприклад, двовимірною таблицею), тобто таким, де індексом є не одне число, а кортеж (сукупність) з декількох чисел, кількість яких збігається з розмірністю масиву [1]. В даній курсовій роботі, динамічний масив використовується для виведення туристичних путівок, які задовольняють вимоги та потреби користувача.

Зв'язаний список - одна з найважливіших структур даних, в якій елементи лінійно впорядковані, але порядок визначається не номерами елементів, а вказівниками, які входять в склад елементів списку та вказують на наступний за даним елемент (в однозв'язних або однобічно зв'язаних списках) або на наступний та попередній елементи (в двозв'язних або двобічно зв'язаних списках). Список має "голову" - перший елемент та "хвіст" - останній елемент. Зв'язані списки мають серію переваг порівняно з масивами. Зокрема, в них набагато ефективніше (за час О(1), тобто незалежно від кількості елементів) виконуються процедури додавання та вилучення елементів. Натомість, масиви набагато кращі в операціях, які потребують безпосереднього доступу до кожного елементу, що у випадку зі зв'язаними списками неможливо та потребує послідовного перебору усіх елементів, які передують даному [2].

Стек - різновид лінійного списку, структура даних, яка працює за принципом (дисципліною) "останнім прийшов - першим пішов" (LIFO, англ. last in, first out). Всі операції (наприклад, видалення елементу) в стеку можна проводити тільки з одним елементом, який знаходиться на верхівці стеку та був введений в стек останнім. Стек можна розглядати як певну аналогію до стопки тарілок, з якої можна взяти верхню, і на яку можна покласти верхню тарілку (інша назва стеку - "магазин", за аналогією з принципом роботи магазину в автоматичній зброї) [3].

Черга - динамічна структура даних, що працює за принципом "перший прийшов - перший пішов" (англ. FIFO - first in, first out). У черги є голова (англ. head) та хвіст (англ. tail). Елемент, що додається до черги, опиняється в її хвості. Елемент, що видаляється з черги, знаходиться в її голові. Така черга повністю аналогічна звичній "базарній" черзі, в якій хто перший встав в неї, той першим буде обслуженим [4].

Двійкове дерево - структура даних у вигляді дерева, в якому кожна вершина має не більше двох дітей. Зазвичай такі діти називаються правим та лівим. На базі двійкових дерев будуються такі структури, як двійкові дерева пошуку та двійкові купи. Часто виникає необхідність обійти усі вершини дерева для аналізу інформації, що в них знаходиться. Існують декілька порядків такого обходу, кожний з яких має певні властивості, важливі в тих чи інших алгоритмах: прямий (preorder), центрований (inorder) та зворотний (postorder) [5].

АВЛ-дерево - збалансоване по висоті двійкове дерево пошуку: для кожної його вершини висота її двох піддерев відрізняється не більше ніж на 1. АВЛ - абревіатура, утворена першими літерами творців (радянських учених) Адельсон-Вельського Георгія Максимовича і Ландіс Євгена Михайловича [6].

Генетичний алгоритм - це еволюційний алгоритм пошуку, що використовується для вирішення задач оптимізації і моделювання шляхом послідовного підбору, комбінування і варіації шуканих параметрів з використанням механізмів, що нагадують біологічну еволюцію. Особливістю генетичного алгоритму є акцент на використання оператора "схрещення", який виконує операцію рекомбінацію рішень-кандидатів, роль якої аналогічна ролі схрещення в живій природі [7].

База даних (скорочено - БД) - впорядкований набір логічно взаємопов'язаних даних, що використовуються спільно та призначені для задоволення інформаційних потреб користувачів. У технічному розумінні включно й система керування БД.

Головне завдання БД - гарантоване збереження значних обсягів інформації (так звані записи даних) та надання доступу до неї користувачеві або ж прикладній програмі. Таким чином, БД складається з двох частин: збереженої інформації та системи керування нею.

З метою забезпечення ефективності доступу записи даних організовують як множину фактів (елемент даних) [8].

Сортування - це алгоритм, що розв'язує задачу сортування, тобто здійснює впорядкування лінійного списку (масиву) елементів. Для алгоритму сортування (як і для будь-якого іншого сучасного алгоритму) основними характеристиками є: час необхідний на впорядкування n-елементного масиву і додаткова пам'ять необхідна для впорядкування. Крім цих двох характеристик, сортування буває стабільним чи нестабільним, з використанням додаткової інформації про елементи, чи без використання.

Для значної кількості алгоритмів середній і найгірший час впорядкування n-елементного масиву є , це пов'язано з тим, що в них передбачені перестановки елементів, що стоять поряд (різниця між індексами елементів не перевищує деякого заданого числа). Такі алгоритми зазвичай є стабільними, хоча і не ефективними для великих масивів. Інший клас алгоритмів здійснює впорядкування за час . В цих алгоритмах використовується можливість обміну елементів, що знаходяться на будь-якій відстані один від одного [9]. Серед найвідоміших алгоритмів сортування: сортування бульбашкою, сортування вставками, швидке сортування, сортування Шелла.

Жадібний алгоритм - простий і прямолінійний евристичний алгоритм, який приймає найкраще рішення, виходячи з наявних на поточному етапі даних, не турбуючись про можливі наслідки, сподіваючись врешті-решт отримати оптимальне рішення. Легкий в реалізації і часто дуже ефективний за часом виконаннях [10]. Багато комбінаторно-оптимізаційних задач не можуть бути розв'язані з його допомогою. В даній курсовій роботі, даний алгоритм використовується для виведення оптимальної кількості путівок, які можна придбати на суму, на яку розраховує користувач.

Таким чином, основними базовими алгоритмами є: стек, черга, бінарне дерево, масив, список та різні види сортувань. В даному програмному продукті використані наступні алгоритми та структури даних: сортування, пошук шляху, динамічний масив та жадібний алгоритм.

1.3 Постановка задачі. Загальні підходи до поставлених завдань

Даний додаток призначений для користувачів, які прагнуть побачити демонстрацію алгоритму пошуку туристичної путівки, та дізнатися про можливості сучасних технологій. Він може використовуватись, як окремо, так і як додаток до демонстрації можливостей штучного інтелекту.

Для здійснення постановки задачі розглянемо основні функціональні частини роботи розроблюваного програмного забезпечення:

· формування загального алгоритму пошуку оптимальної туристичної путівки;

· вибір та адаптація базових алгоритмів, що будуть використані в програмному продукті.

Розробка програмного продукту за такими функціональними частинами:

· введення вимог(даних) користувача щодо туристичної путівки. Дана функціональна частина відповідає за введення користувачем його вимог та вподобань, відповідно до яких будуть формуватися туристичні путівки;

· меню. Дана функціональна частина відповідає за послідовність дій користувача;

· знаходження путівки. Дана функціональна частина відповідає за пошук путівок, які задовольняють вимоги, вказані користувачем та вибір з них оптимальної;

Дані функціональні частини дозволяють забезпечити демонстрацію алгоритму пошуку шляху оптимальної туристичної путівки. Послідовність виклику даних функціональних частин визначатиметься алгоритмом роботи програми.

Алгоритм для вирішення задачі можна описати так:

Користувач запускає програму. У верхній частині програмного вікна подана інформація щодо порядку введення даних користувачем та їхнього формату . У разі ознайомлення користувачем з цією інформацією, він переходить до наступного етапу - введення своїх особистих даних, на основі яких створюється об'єкт. Потім новостворений об'єкт порівнюється з об'єктами туристичних путівок, які зберігаються в глобально визначеному масиві. Порівняння здійснюється таким чином: перевіряються усі дані користувача з даними почергової туристичної путівки. У разі збігу даних лічильник збільшується на 1 позицію. Таким чином ми отримуємо кількість путівок, які відповідають потребам користувача. Далі динамічно створюється масив, розмірність якого задається лічильником. Здійснюється повторна перевірка на збіг даних користувача з даними путівки, та у разі позитивного результату даний об'єкт путівки заноситься у новостворений масив. Таким чином ми отримуємо набір туристичних путівок, який відповідає потребам користувача.

Потім користувач переходить в меню. В меню наявні такі команди:

1. Print all passes - команда, яка виводить на екран усі наявні туристичні путівки, які відповідають вимогам користувача;

2. Find minimum cost of pass - виводиться на екран путівка з мінімальною вартістю;

3. Find maximum cost of pass - виводиться на екран путівка з максимальною вартістю;

4. Sort - відбувається висхідне сортування путівок, результат якого буде відсортований масив, виведений на екран;

5. Greedy algorithm - буде продемонстровано використання жадібного алгоритму, який полягає у знаходженні путівок, кількість яких була б максимальною приймаючи до уваги суму грошей,на яку розраховує користувач;

6. Choose the travel pass - користувач обирає собі туристичну путівку;

7. Exit - вихід з меню.

Користувач вийшов з меню.

Далі він отримує свою оптимальну путівку:

· Якщо він(користувач) вибрав її самотужки, натиснувши на команду меню " Choose the travel pass", то вибрана ним путівка виведеться на екран;

· У разі якщо користувач не вибрав путівки, програма автоматично обере путівку з мінімальною вартістю.

Розглянемо мову програмування, яка використана в курсовій роботі.

Детальне порівняння мов програмування наведено в розділі 3. С++ (вимовляється як "сі-плюс-плюс") - мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році, яка спочатку отримала назву "Сі з класами". Згодом Страуструп перейменував мову у С++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.

У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм таких як відеоігри. С++ суттєво вплинула на інші, популярні сьогодні, мови програмування: C# та Java.

При розробці курсової роботи були використані такі бібліотеки:

Для розробки програмного забезпечення на мові програмування С++, необхідно використовувати Стандартну Бібліотеку. Цей термін означає колекцію класів та функцій, які написані на базовій мові. Стандартна бібліотека підтримує декілька основних контейнерів, функцій для роботи з цими контейнерами, об'єктів-функції, основних типів стрічок та потоків ( включаючи інтерактивний та файловий ввід-вивід), підтримку деяких мовних особливостей, і часто використовувані функції для виконання таких задача, як, наприклад, знаходження квадратного кореня заданого числа. Стандартна бібліотека мови С++ також містить деякі специфікації стандарту ISO C90 стандартної бібліотеки Сі. Функціональні особливості Стандартної Бібліотеки оголошуються в межах простору імен std [11].

Зокрема при розробці даної програми були використані наступні елементи Стандартної Бібліотеки (H-файли):

· stdafx.h - заголовний файл, який використовується для побудови файлу перед компільованих заголовків ; включено більшість стандартних і використовуваних заголовних файлів, які не входять в сам проект;

· iostream - бібліотека і відповідний заголовний файл, які використовуються для організації введення-виведення;

· time.h - заголовний файл мови програмування Сі, що містить типи і функції для роботи з датою та часом;

· windows.h - заголовний файл для роботи з графічним інтерфейсом програми;

При розробці курсової роботи, будуть реалізовані всі підпрограми.

Таким чином в першому розділі курсової роботи розглянута предметна область та існуючі реалізації, обґрунтований вибір мови програмування та вибір бібліотек, описані базові алгоритми та структури даних, виконана постановка задачі системи для пошуку оптимальної туристичної путівки.

2. Алгоритми та структури даних розробки програми реалізації пошуку оптимальної туристичної путівки

2.1 Алгоритм побудови інтерфейсу вхідних даних програми пошуку оптимальної туристичної путівки

Вхідний інтерфейс повинен бути максимально простим та не відволікати користувача від його основної мети. Тому даний інтерфейс має вигляд консолі.

Інтерфейс вхідних даних має вигляд вікна з зеленим фоном та білими літерами на його тлі.

Користувач у даному режимі ознайомлюється з параметрами вхідних даних та вводить власні особисті дані.

У вікні вхідного інтерфейсу (Рис. 2.1) користувач, як анонсувалося раніше, ознайомлюється з параметрами вхідних даних. Вони подані у вигляді невеликої довідки, яка знаходиться зверху у правому куті вікна. Дана довідка зникає лише після введення особистих даних користувачем, що збільшує шанси користувача правильно ввести особисті дані та врешті-решт знайти свою путівку.

Після того, як користувач ознайомився з параметрами вхідних даних, він переходить до наступного етапу - введення особистих даних, які є вхадними, де процес введення представлений у вигляді заповнення таблиці. До особистих даних належать такі типи даних користувача:

1. Місто в якому він проживає. У разі відсутності міста у довідці, оберіть те місто, яке знаходиться найближче за розташуванням до вашого.

2. Дата замовлення туристичної путівки. Усі можливі дати вказані у інформаційній довідці.

3. Кількість дорослих.

4. Кількість дітей.

5. Вартість путівки. Параметри вартості теж вказані у інформаційній довідці.

Після введення усіх цих даних, згідно з параметрами вхідних даних, користувач може розраховувати на пошук та знаходження оптимальної туристичної путівки.

Рисунок 2.1 - Введення особистих даних користувача

Таким чином, вхідний інтерфейс представляє собою поле для введення особистих даних користувача, яке містить в собі підполя, які були згадані раніше, як типи даних. Лістинг даного модуля представлений у додатку А.

2.2 Алгоритм побудови програми пошуку оптимальної туристичної путівки

На рисунку 2.2 зображено алгоритм користування програмою. Користувач повинен ввести особисті дані. Якщо вказані дані задовольняють параметри, то створюється відповідний масив туристичних путівок, який збігається повністю або частково з даними користувача. Далі користувач переходить в режим меню, де він обирає команду. В залежності від обраної команди буде отриманий відповідний результат. Після виходу з меню користувач отримує оптимальну туристичну путівку, яка може бути результатом вибору користувача у відповідному пункті меню, або результатом вибору програми, яка обирає за принципом дешевизни.

Рисунок 2.2 - Загальний алгоритм користування програмою

Меню та його команди описувалися раніше в пункті 1.3.

В основній частині додатку було використано такі базові алгоритми та структури даних: динамічний масив, сортування, пошук туристичної путівки та жадібний алгоритм.

Таким чином, пошук оптимальної туристичної путівки є основним режимом програми.

2.3 Алгоритм побудови інтерфейсу вихідних даних програми пошуку оптимальної туристичної путівки

Після того, як користувач вийшов з меню, натиснувши на відповідну клавішу, він отримує туристичну путівку, яка задовольняє його вимоги та є оптимальною . Оптимальна путівка може бути обрана користувачем у пункті меню "Choose the travel pass", інакше - оптимальною вважається путівка з найменшою вартістю. Знайдена путівка відображається на екрані у вигляді таблиці (Рис. 2.3).

City -

Period From To

Quantity of adults -

Quantity of children -

Category of hotel -

Location of hotel -

Cost of pass -

Type of pass -

Hotel -

Рисунок 2.3 - Відображення знайденої оптимальної туристичної путівки на екрані

При реалізації вихідного інтерфейсу, було застосовано такі базові алгоритми: динамічний масив, який потрібен для зберігання туристичних путівок, які задовольняють вимоги користувача.

Таким чином, в другому розділі було розглянуто алгоритми побудови вхідного та вихідного інтерфейсу, а також алгоритм користування системою для пошуку оптимальної туристичної путівки.

3. Реалізація програми створення системи пошуку оптимальної туристичної путівки

3.1 Вибір мови програмування та особливості реалізації

Для якісного і об`єктивного вибору мови програмування, потрібно порівняти найбільш актуальні мови програмування. Після цього визначити всі переваги і недоліки кожної з мов програмування. На сучасному розвитку найбільш актуальним і прогресивними мовами програмування є: С++, С# та Java

Таблиця 1.1 - Порівняння С++, С#, Java

Особливість

C + +

C #

Java

Збір сміття

Ні

Так

Так

Псевдоніми

Так

Ні

Ні

Множинне успадкування

Так

Ні

Ні

Перевантаження операторів

Так

Так

Ні

Вбудований ассемблер

Так

Ні

Ні

Прямий доступ до апаратної частини

Так

Ні

Ні

Шаблони функцій

Так

Ні

Так

TypeOf

Ні

Так

Ні

Foreach

Ні

Так

Так

Гарантована ініціалізація

Ні

Так

Так

Автоматичний деструктор

Так

Так

Ні

Прямий доступ до С

Так

Ні

Ні

Умовна компіляція

Так

Так

Ні

В таблиці (таб. 1.1) наведено порівняння найбільш актуальних мов програмування на даному етапі розвитку інформаційних технологій. В таблиці наведено лише відмінні ознаки тієї чи іншої мови програмування. Тому було прийнято рішення, що С++ найбільше підходить для виконання поставленої задачі, адже у неї велика швидкість роботи програм, що практично не поступається програмам на мові С. Також у неї велика масштабованість, що дає змогу розробляти програми для найрізноманітніших платформ і систем.

Хоч у С++ є ряд недоліків в порівнянні з сучасними мовами програмування, вони не вплинуть на рішення поставленої задачі.

Тому для рішення поставленої задачі, було обрано мову програмування С++.

3.2 Реалізація базових алгоритмів

При розробці системи пошуку оптимальної туристичної путівки, були використані такі базові алгоритми: динамічний масив, сортування, пошук оптимальної туристичної путівки та жадібний алгоритм.

Вхідний інтерфейс можна розділити на такі елементи:

· ініціалізація даних користувача;

· створення динамічного масиву путівок, які задовольняють вимоги користувача.

Після ознайомлення з параметрами вхідних даних, потрібно натиснути будь-яку клавішу, після чого з'явиться перше поле для введення текстових даних, яке слід ініціалізувати . Після завершення введення даних першого поля натиснути клавішу ENTER , після чого з'явиться друге поле для введення текстових даних. Користувач повинен ввести ще одне поле з текстовими даними, та три поля з числовими даними. Процес введення користувачем даних забезпечується методом ask() класу Travel_ticket:

void ask()

{

cout << endl;

cout << "\t\t\tEnter your data" << endl;

printf("\t\t|----------------------------------------------\n");

printf("\t\t|Enter your city - \t\t\t");

cin >> city;

printf("\t\t|----------------------------------------------\n");

printf("\t\t|Enter your date of travelling :\t");

cin >> period_start;

printf("\t\t|----------------------------------------------\n");

cout << "\t\t|Enter quantity of adults -\t\t";

cin >> adults;

printf("\t\t|----------------------------------------------\n");

cout << "\t\t|Enter quantity of children -\t\t";

cin >> children;

printf("\t\t|----------------------------------------------\n");

cout << "\t\t|Enter cost of pass -\t\t\t";

cin >> vartist;

printf("\t\t|----------------------------------------------\n");

cout << endl;

}

Далі введенні дані користувача перевіряються на наявність збігів з даними туристичних путівок, які наявні в розпорядженні програми, та обраховується їхня кількість. Потім, динамічно створюється масив, розмірність якого є кількістю даних туристичних путівок.

int size = 0;

for (int i = 0; i < size_1; i++)

{

if (user->get_cost() >= mas[i]->get_cost())

if (user->get_adults() <= mas[i]->get_adults())

if (user->get_child() <= mas[i]->get_adults())

if (user->Get_day()<=mas[i]->Get_day()&&user->Get_month()==mas[i]->Get_month()&&user->Get_year()==mas[i]->Get_year())

if ((user->get_c(0) == mas[i]->get_c(0))&&(user->get_c(1) == mas[i]->get_c(1)))

{

size++;

}

}

Travel_ticket **mas_2 = (Travel_ticket**)malloc(size * sizeof(Travel_ticket*));

int j = 0;

for (int i = 0; i < size_1; i++)

{

if (user->get_cost() >= mas[i]->get_cost())

if (user->get_adults() <= mas[i]->get_adults())

if (user->get_child() <= mas[i]->get_adults())

if (user->Get_day() <= mas[i]->Get_day() && user->Get_month() == mas[i]->Get_month() && user->Get_year() == mas[i]->Get_year())

if ((user->get_c(0) == mas[i]->get_c(0)) && (user->get_c(1) == mas[i]->get_c(1)))

{

if (j < size)

{

mas_2[j] = mas[i];

}

j++;

}

}

Потім користувач потрапляє у меню де реалізовані наступні алгоритми :

· сортування;

· жадібний алгоритм.

Сортування здійснюється при виборі користувачем команди "Sort" . Виконується сортування бульбашкою за вартістю туристичної путівки: від найбільшої вартості до найменшої.

for (int i = 1; i < size ; ++ i)

{

for (int j = size-1; j >=i; --j)

if (mas_2[j-1]->get_cost() < mas_2[j]->get_cost())

{

temp = mas_2[j-1];

mas_2[j - 1] = mas_2[j];

mas_2[j] = temp;

}

}

Жадібний алгоритм реалізується при виборі користувачем команди меню "Greedy algorithm". Даний алгоритм знаходить максимальну кількість туристичних путівок, яку користувач може дозволити собі, враховуючи його суму грошей, та відбражає на екрані путівки, які входять у цю кількість.

int amount = user->get_cost();

int *number = new int[size];

int *costs = new int[size];

for (int i = 1; i < size; ++i)

{

for (int j = size - 1; j >= i; --j)

if (mas_2[j - 1]->get_cost() < mas_2[j]->get_cost())

{

temp = mas_2[j - 1];

mas_2[j - 1] = mas_2[j];

mas_2[j] = temp;

}

costs[i] = mas_2[i]->get_cost();

}

int *q= new int[size];

for (int i = 0; i < size; i++)

q[i] = costs[i];

int *p=new int[size];

for (int i = 0; i<size; i++)

{

q[i] = 0;

p[i] = 0;

number[i] = 0;

}

int num = 0;

for (int i = 0; i<size; i++)

{

num = 0;

if (costs[i] <= amount)

{

number[i] = num += amount / costs[i];

amount %= costs[i];

if (amount != 0 || amount == 0)

{

q[i] = costs[i];

p[i] = num;

number[i] = num;

}

}

}

if (amount>0)

printf("Amount of money is too small\n");

else

{

printf("\tQuantity of passes - \t%d\n", sum(number, size));

cout << endl;

for (int i = 0; i<size; i++)

{

if (q[i] != 0 && p[i] != 0)

{

printf("\t%d\t-\t", p[i]);

printf("\t%d\t-\t", q[i]);

cout << endl << endl;

mas_2[i]->Print();

}

}

cout << endl;

}

Вихідний інтерфейс можна розділити на такі елементи:

· пошук оптимальної туристичної путівки;

· виведення на екран.

У разі якщо користувач не обрав собі путівки в меню програма автоматично призначає оптимальною путівку з мінімальню вартістю.

min = mas_2[0];

for (int i = 0; i < size; i++)

if (mas_2[i]->get_cost() < min->get_cost())

min = mas_2[i];

За допомогою наступного фрагменту лістингу відбувається виведення знайденої оптимальної туристичної путівки на екран. Це забезпечує метод Print() класу Travel_ticket.

void Print()

{

printf("\t|--------------------------------------------|\n");

cout << "\t|City - \t\t\t" << city << "\t" <<endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Period " << endl;

cout << "\t\tfrom \t\t\t" << period_start << "\t" << endl;

cout << "\t\tto \t\t\t" << period_finish << "\t" << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Quantity of adults -\t\t" << adults << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Quantity of children -\t\t" << children << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Category of hotel -\t\t" << category_hotel << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Location of hotel -\t\t" << location_hotel << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Cost of pass -\t\t\t" << vartist<< endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Type of pass -\t\t\t" << ticket << endl;

printf("\t|--------------------------------------------|\n");

cout << "\t|Hotel -\t\t\t" << hotel<< endl;

printf("\t|--------------------------------------------|\n");

cout << endl << endl;};

3.3 Реалізація програми пошуку оптимальної туристичної путівки мовою С++

На прикладі пошуку оптимальної туристичної путівки можна продемонструвати роботу базових алгоритмів та структур даних. Натиснувши кнопку "ОК" створюється динамічний масив комірок лабіринту, а натиснувши кнопку "Знайти" відбувається використання алгоритму пошуку шляху, частиною якого є сортування. Приклад використання динамічного масиву, а також сортування, пошук туристичної путівки, та жадібний алгоритм - у додатку А.

Таким чином в програмі реалізовані вхідний та вихідний інтерфейси, та використані базові алгоритми: сортування, пошук туристичної путівки, динамічний масив та жадібний алгоритм.

Отже, в розділі 3, курсової роботи був обґрунтований вибір мови програмування, проаналізоване використання базових алгоритмів в додатку, з переліком використаних елементів бібліотек, а також розглянута реалізація програми на прикладі вхідного та вихідного інтерфейсів, при створенні яких були використані базові алгоритми та структури даних.

Висновки

Курсова робота присвячена розробці програми для роботи з базовими алгоритмами та структурами даних. Початком виконання курсової роботи стало дослідження різного роду інформаційних джерел та ознайомлення з теоретичними засадами. Спроектовано зовнішній вигляд інтерфейсу та розподілено функції між його елементами.

Відподвідно до завдань курсової роботи були виконані:

Аналіз предметної області та порівняння базових алгоритмів, в результаті якого вибраний алгоритм .

Адаптація базових алгоритмів до середовища розробки та поставленого завдання.

Реалізація адаптованих алгоритмів в програмному продукті.

При розробці курсової роботи були використані бібліотечні елементи бібліотек Java Development Kit, Android Software Development Kit та LibGDX.

Були реалізовані всі елементи пошуку оптимальної туристичної путівки.

В ході виконання проекту було отримано наступні навички: використання базових алгоритмів та структур даних, робота із інтегрованим середовищем розробки Microsoft Visual Studio, змінними різних типів, класами та об'єктами.

Програмний додаток використовується як самостійний інструмент для пошуку оптимальної туристичної путівки.

Список використаних джерел

1. Массивы в Java [Електронний ресурс] - Режим доступу до ресурсу: http://kostin.ws/java/java-arrays.html.

2. Связный список [Електронний ресурс] - Режим доступу до ресурсу: http://kvodo.ru/linked-lists.html.

3. Стек, очередь, дек [Електронний ресурс] - Режим доступу до ресурсу: http://informatics.mccme.ru/mod/book/view.php?id=580.

4. Стек, очередь, дек [Електронний ресурс] - Режим доступу до ресурсу: http://informatics.mccme.ru/mod/book/view.php?id=580.

5. Двоичные деревья поиска: начальные сведения [Електронний ресурс] - Режим доступу до ресурсу: http://algolist.manual.ru/ds/btree.php.

6. Работа со структурами данных в языках Си и Python: Часть 8. Сбалансированные двоичные деревья (AVL-деревья)[Електронний ресурс] - Режим доступу до ресурсу: http://www.ibm.com/developerworks/ru/library/l-data_structures_08/ .

7. Популярно о генетических алгоритмах [Електронний ресурс] - Режим доступу до ресурсу: http://algolist.manual.ru/ai/ga/ga1.php.

8. Базы данных - Урок 1. Понятие базы данных Источник: http://site-do.ru/db/db1.php © site-do.ru [Електронний ресурс] - Режим доступу до ресурсу: http://site-do.ru/db/db1.php.

9. Анализ сложности алгоритмов. Примеры [Електронний ресурс] - Режим доступу до ресурсу: http://pro-prof.com/archives/1660.

10. Томас Кормен, Чарльз Лейзерсон, Рональд Рівест і Кліффорд Штайн. Вступ в алгоритми, 2-ге видання. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Розділ 16.

11. Бьёрн Страуструп: Язык программирования C++, Addison-Wesley, ISBN 0-201-70073-5.

Додаток А

Лістинг модуля Travel.cpp

#include "stdafx.h"

#include "Travel.h"

#include <time.h>

#include <windows.h>

const int NotUsed = system("color 20");

const int size_1 = 44;

Travel_ticket *mas[size_1];

int sum(int *a, int size)

{

int sum = 0;

for (int i = 0; i<size; i++)

{

sum += a[i];

}

return sum;

}

enum ConsoleColor

{

Black = 0,

Blue = 1,

Green = 2,

Cyan = 3,

Red = 4,

Magenta = 5,

Brown = 6,

LightGray = 7,

DarkGray = 8,

LightBlue = 9,

LightGreen = 10,

LightCyan = 11,

LightRed = 12,

LightMagenta = 13,

Yellow = 14,

White = 15

};

void SetColor(int text, int background);

void SetColor_Console(int text, int background);

char *city[] = {

"Kyiv",

"Charkiv",

"Odesa",

"Lviv",

"Dnipropetrovsk",

"Vinnytsa",

"Zaporrizza"

};

char *hotel[] = {

"Edem",

"Edeleveys",

"7 days",

"Stambul"

};

char *ticket[] = {

"No pass",

"Bus",

"Airplane",

"Train"

};

char *location[] = {

"Sea",

"City",

"Out of city",

"Mountain"

};

char *region[] = {

"Zakarpattia",

"Lviv",

"Chmilnyk",

"Odesa",

"Truskavets",

"Crim",

"Berdiansk",

"Bukovel"

};

using namespace std;

using namespace System;

int main()

{

srand(time(NULL));

cout << endl;

mas[0] = new Travel_ticket("Charkiv", "11.02.2016", "16.02.2016", 3, 0, rand() % 5, location[rand() % 3], 3000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[1] = new Travel_ticket("Charkiv", "11.02.2016", "18.02.2016", 3, 0, rand() % 5, location[rand() % 3], 2000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[2] = new Travel_ticket("Charkiv", "11.02.2016", "19.02.2016", 3, 0, rand() % 5, location[rand() % 3], 5000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[3] = new Travel_ticket(city[rand() % 6], "16.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[4] = new Travel_ticket(city[rand() % 6], "14.02.2016", "20.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[5] = new Travel_ticket(city[rand() % 6], "12.02.2016", "18.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[6] = new Travel_ticket(city[0], "13.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], 100, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[7] = new Travel_ticket(city[0], "18.02.2016", "22.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[8] = new Travel_ticket(city[0], "20.02.2016", "28.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[9] = new Travel_ticket(city[0], "25.02.2016", "30.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[10] = new Travel_ticket(city[0], "12.02.2016", "18.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[11] = new Travel_ticket(city[1], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[12] = new Travel_ticket(city[1], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[13] = new Travel_ticket(city[1], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[14] = new Travel_ticket(city[1], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[15] = new Travel_ticket(city[1], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand()%10+1)* 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[16] = new Travel_ticket(city[2], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[17] = new Travel_ticket(city[2], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[18] = new Travel_ticket(city[2], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[19] = new Travel_ticket(city[2], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[20] = new Travel_ticket(city[2], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[21] = new Travel_ticket(city[3], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[22] = new Travel_ticket(city[3], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[23] = new Travel_ticket(city[3], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[24] = new Travel_ticket(city[3], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[25] = new Travel_ticket(city[3], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[26] = new Travel_ticket(city[4], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[27] = new Travel_ticket(city[4], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[28] = new Travel_ticket(city[4], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[29] = new Travel_ticket(city[4], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[30] = new Travel_ticket(city[4], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[31] = new Travel_ticket(city[5], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[32] = new Travel_ticket(city[5], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[33] = new Travel_ticket(city[5], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[34] = new Travel_ticket(city[5], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[35] = new Travel_ticket(city[5], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[36] = new Travel_ticket(city[6], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[37] = new Travel_ticket(city[6], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[38] = new Travel_ticket(city[6], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[39] = new Travel_ticket(city[6], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[40] = new Travel_ticket(city[6], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[41] = new Travel_ticket(city[7], "14.02.2016", "17.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[42] = new Travel_ticket(city[7], "17.02.2016", "23.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[43] = new Travel_ticket(city[7], "19.02.2016", "29.02.2016", rand() % 3 + 1, rand() % 3, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[44] = new Travel_ticket(city[7], "26.02.2016", "31.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

mas[45] = new Travel_ticket(city[7], "10.02.2016", "19.02.2016", rand() % 3 + 1, rand() % 3 + 1, rand() % 5, location[rand() % 3], (rand() % 10 + 1) * 1000, ticket[rand() % 3], hotel[rand() % 3], region[rand() % 7]);

SetColor_Console(White, Green);

Travel_ticket *user_choice = NULL;

Travel_ticket *min;

int count = 0;

cout << "\n\tInformation " << endl;

cout << "\tCity :";

for (int i = 0; i < 7; i++)

cout << city[i] << " ";

cout << "\n\tDate :";

cout << "from 10.02.2016 to 26.02.2016" << endl;

cout<<"\tCost :" << "from 1000 $ to 10 000 $" << endl;

Travel_ticket *user=new Travel_ticket();

user->ask();

system("cls");

int size = 0;

for (int i = 0; i < size_1; i++)

{

if (user->get_cost() >= mas[i]->get_cost())

if (user->get_adults() <= mas[i]->get_adults())

if (user->get_child() <= mas[i]->get_adults())

if (user->Get_day()<=mas[i]->Get_day()&&user->Get_month()==mas[i]->Get_month()&&user->Get_year()==mas[i]->Get_year())

if ((user->get_c(0) == mas[i]->get_c(0))&&(user->get_c(1) == mas[i]->get_c(1)))

{

size++;

}

}

Travel_ticket **mas_2 = (Travel_ticket**)malloc(size * sizeof(Travel_ticket*));

int j = 0;

for (int i = 0; i < size_1; i++)

{

if (user->get_cost() >= mas[i]->get_cost())

if (user->get_adults() <= mas[i]->get_adults())

if (user->get_child() <= mas[i]->get_adults())

if (user->Get_day() <= mas[i]->Get_day() && user->Get_month() == mas[i]->Get_month() && user->Get_year() == mas[i]->Get_year())

if ((user->get_c(0) == mas[i]->get_c(0)) && (user->get_c(1) == mas[i]->get_c(1)))

...

Подобные документы

  • Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.

    курсовая работа [460,9 K], добавлен 04.03.2014

  • Вибір середовища програмування Borland Delphi 7.0 для створення електронно-медичного довідника. Формування бази даних для перегляду та пошуку медичних препаратів для лікування. Особливості програмування інтерфейсу програми, інструкція користувача.

    курсовая работа [2,2 M], добавлен 19.09.2012

  • Побудова інформаційно-математичної моделі задачі. Визначення структури даних, розробка інтерфейсу. Складання коду програми за допомогою мови програмування Delphi 7.0. Реалізація проекту у візуальному середовищі. Інструкція з експлуатації програми.

    курсовая работа [601,3 K], добавлен 03.09.2009

  • Основні переваги програмування на мові Delphi. Використання стандартних операторів при створенні інтерфейсу користувача. Вибір складу технічних і програмних засобів, організація вхідних і вихідних даних. Розробка програми, блок-схеми та тексту програми.

    реферат [316,1 K], добавлен 22.01.2013

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

  • Написання програми для мобільного приладу, яка буде переводити числа з однієї системи числення в іншу. Розробка графічного інтерфейсу, яким зручно буде користуватись. Опис процедур, обробників та мови програмування. Дослідження логічних частин програми.

    курсовая работа [1,2 M], добавлен 27.08.2014

  • Проектування інтерфейсу програми. Вимоги до продукту. Вхідні дані на розробку автоматизованої системи. Вибір середовища програмування. Розробка структури бази даних. Функціональна та логічна структура програми. Розробка структури таблиць бази даних.

    курсовая работа [43,1 K], добавлен 30.06.2015

  • Розробка програми "Авто" для введення та збереження інформації про власників та їхні автомобілі. Побудова математичної моделі. Критерії вибору та пошуку даних. Структура введених та збережених у файлах програми даних. Алгоритм основної програми та її код.

    курсовая работа [20,3 K], добавлен 07.10.2010

  • Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.

    лекция [445,0 K], добавлен 24.07.2014

  • Базові конструкції мови програмування С++ з позиції об’єктного програмування. Розробка програми для автоматизації обліку товарів на складі магазину парфумів. Реалізація програми в середовищі Visual Studio C++. Розробка інтерфейсу і тестування програми.

    дипломная работа [907,9 K], добавлен 01.04.2016

  • Модель аналізу-синтезу компіляції. Формальний опис вхідної мови програмування. Вибір технології програмування, проектування таблиць транслятора та вибір структур даних. Опис програми реалізації лексичного аналізатора. Розробка дерев граматичного розбору.

    курсовая работа [75,8 K], добавлен 26.12.2009

  • Цілі і завдання розробки, її предмет і актуальність. Опис предметної області, цілі і завдання програми. Вибір методу рішення, опис процесу програмування і вибір інструментальних засобів для реалізації проекту, опис вхідних та вихідних даних, інтерфейсу.

    курсовая работа [327,1 K], добавлен 01.09.2014

  • Мови програмування, на яких написана програма побудови замкнутих багатокутників. Функціональні обмеження на застосування. Методи та елементи, що використовуються. Структура програми з описом функцій складових частин. Зв'язок програми з іншими програмами.

    курсовая работа [76,6 K], добавлен 01.04.2016

  • Розгляд оригінального візерунку, що складається із суперпозиції чотирьох кривих. Проект реалізації алгоритму побудови цих кривих у вигляді програми функціональною мовою програмування Lisp. Головна особливість кривої Серпінського. Створення програми Serp.

    курсовая работа [200,9 K], добавлен 23.04.2010

  • Аналіз проектування баз даних та створення програми на тему IC "Туристичні агентства". Розробка простого для розуміння інтерфейсу, огляд реалізації додавання, редагування, видалення, пошуку інформації. Характеристика задач автоматизації і фізичної моделі.

    курсовая работа [4,1 M], добавлен 12.01.2012

  • Постановка задачі: створення списку співробітників інституту. Аналіз мов програмування та вибір мови PascalABC.Net - 32-розрядної програми, яка може працювати на сучасних версіях Windows. Опис функцій та процедур, реалізації інтерфейсу користувача.

    курсовая работа [277,8 K], добавлен 25.06.2015

  • Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.

    дипломная работа [3,3 M], добавлен 10.10.2013

  • Створення спеціалізованої програми на мові програмування Турбо Паскаль для обробки інформації, що вноситься в бази даних по приватних підприємствах. Постановка задачі і структура зберігаючих даних. Розробка алгоритмів основної програми та процедури Is.

    курсовая работа [27,0 K], добавлен 07.10.2010

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Розробка інтерфейсу програми "Автоматизована інформаційна система автошколи". Вибір архітектури, характеристика користувача. Генерація, проектування схеми бази даних, детальне програмування. Розробка структури таблиць. Лістинг програми, результат роботи.

    курсовая работа [2,7 M], добавлен 11.09.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.