
- •Лабораторна робота 11
- •1. План виконання лабораторної роботи
- •2.3. Приклад 1 роботи з деревами (рекурсивний обхід і виведення значень вузлів існуючого дерева)
- •2.4. Приклад 2 роботи з деревами (рекурсивна побудова нового впорядкованого дерева, з виведенням опису його структури та значень вузлів)
- •3. Методичні рекомендації до опрацьовування контрольних питань і виконання контрольних завдань лабораторної роботи
- •4. Контрольні питання
- •6.1. Контрольне завдання 1
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ |
||||
ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ |
||||
Кафедра інформаційних технологій |
||||
|
||||
ЗВІТ З ЛАБОРАТОРНОЇ РОБОТИ 11 |
||||
|
з дисципліни „Логічне програмування” |
|||
|
студента третього курсу денної форми навчання |
|||
|
напряму підготовки 6.050102 “Комп’ютерна інженерія” |
|||
|
з професійною орієнтацією “Комп’ютерні системи та мережі” |
|||
|
галузі знань 0501 “Інформатика та обчислювальна техніка” |
|||
|
факультету кібернетики |
|||
|
Бойко Тараса |
|||
|
||||
Дата проведення лабораторної роботи: |
|
«13» листопада 2012р. |
||
Дата подання звіту за графіком: |
|
«20» листопада 2012р. |
||
|
|
|
||
Дата подання звіту студентом: |
|
____________________ |
||
Підпис студента: |
|
____________________ |
||
|
|
|
||
Позначка викладача про результати та дату перевірки звіту: |
|
____________________ |
||
|
|
|
||
Відомості про викладача, що виконував перевірку звіту (прізвище, ініціали, посада, науковий ступінь, вчене звання): |
|
Веселовська Г.В., доцент кафедри інформаційних технологій ХНТУ, к.т.н., доцент |
||
|
|
|
||
Підпис викладача, що виконував перевірку звіту : |
|
_____________________ |
||
|
||||
Херсон – 2012р. |
Лабораторна робота 11
Тема: Робота з деревами в процесі логічного програмування мовою Пролог. Частина 1.
Мета: отримання знань, умінь і навичок рекурсивної побудови та обробки дерев у логічних програмах, створених засобами мови Пролог.
1. План виконання лабораторної роботи
1. Вивчити основні теоретичні відомості до лабораторної роботи.
2. Ознайомитися з методичними вказівками для самостійної роботи студентів до лабораторної роботи 11.
3. Дати відповіді на контрольні питання.
4. Виконати завдання для самоперевірки.
5. Виконати контрольні завдання.
6. Оформити та захистити звіт з лабораторної роботи (вимоги до оформлення та захисту лабораторної роботи знаходяться в Додатку А, а зразок оформлення титульного аркуша звіту про виконання лабораторної роботи знаходиться в Додатку Б).
2. ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Вступні пояснення до лабораторної роботи
У даній лабораторній роботі буде висвітлено наступні питання:
– огляд базових технологій Прологу, призначених для рекурсивної побудови та обробки дерев;
– два типових приклади роботи з деревами (рекурсивний обхід і виведення значень вузлів існуючого дерева; рекурсивна побудова нового впорядкованого дерева, з виведенням опису його структури та значень вузлів).
2.2. Огляд базових технологій Прологу,
призначених для рекурсивної побудови та обробки дерев
Дерево – структура даних, яка може бути послідовно розділена на наступні складові компоненти:
1) корінь дерева;
2) ліве піддерево;
3) праве піддерево.
Дерево є рекурсивним типом даних (так само, як і список).
Рекурсивна структура дерева обумовлена тим, що ліве та праве піддерева, в свою чергу, являють собою дерева.
Дерево також є складеним об'єктом даних.
Двійковим (бінарним) деревом називається таке дерево, що має тільки два піддерева.
Двійкове дерево називається впорядкованим у тому випадку, якщо для кожного кореня дерева виконуються наступні умови:
– значення, що знаходиться в корені основного дерева, є більшим за те значення, що знаходиться в корені лівого піддерева;
– значення, що знаходиться в корені основного дерева, є меншим за те значення, що знаходиться в корені правого піддерева.
Двійкове дерево, що наведене на рисунку 1.11, є впорядкованим.
Рисунок 11.1 – Структурна схема впорядкованого двійкового дерева,
що містить п'ять вершин (вузлів)
Пролог надає можливість визначати рекурсивні типи даних, які відповідають деревам, найрізноманітнішими способами.
Одним із найрозповсюдженіших є наступний спосіб визначення дерева:
DOMAINS
treetype = tree(integer, treetype, treetype); nil()
У даному визначенні, ім'я домену treetype та імена функторів (tree та nil) указаного домену є довільними, не являючи собою стандартні імена Прологу.
Наведене вище визначення означає, що дерево treetype є складеним об'єктом, який містить наступні три компоненти, поєднані функтором tree:
– корінь, який належить домену integer;
– два піддерева, що належать домену treetype (саме цей домен описує структуру даних типу дерева).
Дерево може знаходитися в двох станах:
– бути порожнім (не мати жодного кореня);
– бути непорожнім (мати хоча би один корінь).
Порожнє дерево описується функтором nil без параметрів (у даному випадку, можна записувати тільки ім'я функтору, не вказуючи порожні дужки).
Вершини (вузли) дерева, що не мають лівих і правих піддерев (наприклад, вершини зі значеннями 1, 3 і 5 на рисунку 11.2), називають листовими вершинами (вузлами).
Рисунок 11.2 – Структурна схема дерева з позначенням листових вершин
Наведене вище визначення та схематичне зображення дозволяють сформувати наступну структуру даних Прологу:
tree (4,
tree (2,
tree (1, nil, nil),
tree (3, nil, nil)),
tree (5, nil, nil))
Найчастіше для роботи з деревами використовують нехвостову рекурсію: необхідність обробляти ліве та праве піддерева вимагає застосування двох рекурсивних цілей в одному реченні, що автоматично означає невиконання першого правила хвостової рекурсії (рекурсивний виклик повинен бути останньою ціллю в хвостовій частині правила виведення).
Дії, які виконуються програмою, що послідовно обробляє корені дерева, називаються обходом дерева.
Розрізняють наступні види послідовностей обходу дерева:
1) обхід дерева в напрямку "згори – вниз" (спочатку обробляється корінь, а потім – піддерева);
2) обхід дерева в напрямку "знизу – вгору" (спочатку обробляються піддерева, а потім – корінь);
3) обхід дерева в напрямку "зліва – направо" (спочатку обробляється ліве піддерево, потім – корінь, а наприкінці – праве піддерево);
4) обхід дерева в напрямку "зправа – наліво" (спочатку обробляється праве піддерево, потім – корінь, а наприкінці – ліве піддерево).
У тому випадку, якщо дерево впорядковане, то:
– при обході дерева в напрямку "зліва – направо", буде отримано зростаючу послідовність значень, які знаходяться в коренях дерева (наприклад, послідовність 1, 2, 3, 4, 5 для дерева, зображеного на рисунку 11.2);
– при обході дерева в напрямку "зправа – наліво", буде отримано спадаючу послідовність значень, які знаходяться в коренях дерева (наприклад, послідовність 5, 4, 3, 2, 1 для дерева, зображеного на рисунку 11.2).