
- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
2. Пошук шляху.|колії|
Механізм рекурсії вельми|дуже| ефективний при програмуванні завдань|задач| пошуку. Як ще один приклад|зразок| розглянемо|розглядуватимемо| завдання|задачу| пошуку шляху|колії| між двома містами. Якщо декілька міст сполучено|з'єднаний| дорогами, то очевидно, що потрапити|попадати| з|із| одного міста в іншій можна різними маршрутами. Завдання|задача| полягає в знаходженні всіх можливих маршрутів.
Карта доріг|любий| між містами може бути зображена|змальовувати| у вигляді графа – набору вершин, що означають міста, і ребер, що позначають|значать| дорогі|любі|.
Представлення карти дорогий у вигляді графа
Процес пошуку може бути представлений|уявляти| як послідовність кроків. На кожному кроці з використанням деякого критерію вибирається крапка|точка|, в яку можна потрапити|попадати| з|із| поточної. Якщо чергова вибрана крапка|точка| збіглася із|із| заданою кінцевою|скінченною| точкою, то маршрут знайдений. Якщо не збіглася, то робимо|чинимо| з|із| цієї крапки|точки| ще крок. Оскільки|тому що| поточна крапка|точка| може бути сполучена|з'єднана| з|із| декількома іншими, то потрібний якийсь формальний критерій вибору. У простому випадку можна вибрати крапку|точку| з|із| найменшим номером.
Хай|нехай|, наприклад, треба знайти всі можливі шляхи|колії| з|із| крапки|точки| 1 в крапку|точку| 5. Згідно|згідно з| прийнятому правилу, спочатку вибираємо крапку|точку| 2. На наступному|такому| кроці з'ясовуємо, що крапка|точка| 2 тупикова, тому повертаємося в крапку|точку| 1 і робимо|чинимо| крок в крапку|точку| 3. З|із| крапки|точки| 3 – в крапку|точку| 4, з|із| 4 – в 6 і з|із| крапки|точки| 6 – в крапку|точку| 5. Один маршрут знайдений. Після|потім| цього повертаємося в крапку|точку| 6 і перевіряємо, чи можливий крок в крапку|точку|, відмінну від 5. Оскільки|тому що| це можливо, то робимо|чинимо| крок в крапку|точку| 7, і потім|і тоді| – в 5. Знайдений ще один шлях|колія|. Таким чином, процес пошуку складається з кроків вперед і повернень назад. Пошук завершується, якщо з|із| вузла почала|розпочинала| рухи вже нікуди йти.
Алгоритм пошуку має рекурсивний характер|вдача|: щоб|аби| зробити крок, ми вибираємо крапку|точку| і знову робимо|чинимо| крок, і так продовжуємо до тих пір, поки не досягнемо мети|цілі|.
Таким чином, завдання|задача| пошуку маршруту може розглядатися|розглядувати| як завдання|задача| вибору чергової крапки|точки| (міста) і пошуку частини|частки| маршруту, що залишилася, тобто має місце рекурсія.
Граф можна представити|уявляти| двовимірним масивом, який назвемо|накликатимемо| mар| (карта). Значення елементу масиву map|[i, j] – це відстань між містами i і j, якщо міста сполучені|з'єднані| дорогою|любою|, або нуль, якщо міста не сполучені|з'єднані| прямою дорогою. Для приведеного графа масив тар| можна зобразити|змальовувати| у вигляді таблиці, представленої|уявляти| на малюнку.
Масив mар
Вміст елементу таблиці на перетині|пересіченні| рядка i і стовпця j відповідає значенню map|[i,j].
Окрім масиву mар| нам буде потрібно масив road| (дорога|люба|) і масив incl|(від include| – включати). У road| ми записуватимемо|занотовуватимемо| номери пройдених|минати| міст. У момент досягнення кінцевої|скінченної| крапки|точки| він міститиме|утримуватиме| номери всіх пройдених|минати| крапок|точок|, тобто опис маршруту.
У inci| [i] записуватимемо|занотовуватимемо| true|, якщо крапка|точка| з|із| номером i включена в маршрут. Робиться|чинить| це для того, щоб не включати в маршрут вже пройдену|минати| крапку|точку| (не ходити по кругу|колу|).
Оскільки|тому що| ми використовуємо рекурсивну процедуру, то треба звернути особливу увагу на умову завершення рекурсивного процесу. Процедура повинна припинити викликати|спричиняти| сама себе, якщо поточна крапка|точка| збіглася із|із| заданою кінцевою|скінченною| точкою.
На малюнку приведена блок-схема алгоритму процедури вибору чергової точки формованого маршруту, а діалогове вікно – на малюнку нижче.
Для введення масиву, що представляє опис карти, використовується компонент StringGridl, для виведення результату (знайденого маршруту) – поле влучні Label1. Початкова і кінцева точки маршруту задаються введенням значень в поля редагування Edit1 і Edit2. Процедура пошуку запускається клацанням кнопки Пошук (Buttonl). Поля влучний Label2, Label3 і Label4 використовуються для виведення пояснюючого тексту.
Блок-схема процедури вибору точки маршруту
Вікно програми Пошук маршруту