Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Логическое программирование1 / 1-5_LR_4KSM_Logichne_progr_2014-15

.pdf
Скачиваний:
16
Добавлен:
07.02.2016
Размер:
498.87 Кб
Скачать

61

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

Предикат readterm, який призначено для читання складених об'єктів, має ряд особливостей застосування.

По-перше, предикат readterm має наступні два параметри:

вхідний перший параметр, який є ім'ям нестандартного домену, що описує складений об'єкт даних;

вихідний другий параметр, який є вільною змінною (так само, як і в інших предикатах уведення).

По-друге, предикат readterm уводить рядок і перетворює його на складений об'єкт даних (природно, що рядок повинен відповідати описаному домену).

2.3.2. Стандартні предикати Прологу,

призначені для виведення (запису) інформації

Існує декілька стандартних предикатів Прологу, призначених для організації виведення (запису) інформації, основними з яких є: предикат виведення write; предикат формування нового рядка nl.

Коротку характеристику стандартних предикатів виведення (запису) представлено в таблиці 2.

62

Таблиця 2

Стандартні предикати Прологу, призначені для виведення (запису) інформації

Найменування

Призначення

Характеристика аргументів (параметрів)

з/п

предикатів

предикатів

 

 

предикатів

 

 

 

 

 

 

1

write

предикат

має

змінну

кількість параметрів,

 

 

виведення

які

повинні

бути константами або

 

 

конкретизованими змінними

 

 

(запису)

 

 

 

 

 

 

 

 

 

2

nl

предикат фор-

не має параметрів

 

 

мування ново-

 

 

 

 

 

го рядка

 

 

 

 

 

 

 

 

 

2.3.3. Приклад програми для введення та виведення інформації

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

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

63

% Програма 6 "Input and output of information"

DOMAINS

info = i (string, string, address)

address = a (string, string, integer, integer)

PREDICATES getinfo (info)

CLAUSES

getinfo (Person):-

write ("Input information in next format:"), nl,

write ("i ('Ivanov', '51-57-31', a ('Kherson', 'Berislav highway', 24, 318))"), nl, nl, readterm (info, Person), nl.

GOAL

getinfo (Person),

write ("You input next information:"), nl, write (Person), nl.

% End of program

Результати роботи програми лістингу 6 є наступними:

Input information in next format:

i('Ivanov', '51-57-31', a ('Kherson', 'Berislav highway', 24, 318))

i("Petrov", "51-57-31", a ("Nicolaev", "Odessa highway", 35, 224))

You input next information:

i ("Петров", "51-57-31", a ("Nicolaev", "Odessa highway", 35, 224))

64

2.4. Методичні рекомендації

до опрацьовування контрольних питань і виконання контрольних завдань лабораторної роботи

Сформульована вище мета лабораторної роботи повинна бути повністю досягнена студентами в процесі виконання ними контрольних питань, завдань для самоперевірки та контрольних завдань (див. розділи 3-5 даних методичних рекомендацій).

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

Основні знання, що повинні бути отримані студентами у підсумку виконання лабораторної роботи: методи реалізації арифметичних, ітераційних

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

Основні вміння, що повинні бути отримані студентами у підсумку виконання лабораторної роботи: практичне опановування технологій побудови правил для визначення арифметичних дій над довільною кількістю операндів заданого типу, виконання операцій повторення методом відкату та організації рекурсії методом самовиклику з використанням інструментальних засобів Прологу; набуття вміння застосовувати метод «Відкату після невдачі» (ВПН)

іметод «Відсікання та відкату» (ВВ) при работі з прикладними базами даних із застосуванням інструментальних засобів Прологу; набуття знань, умінь і навичок роботи зі стандартними предикатами введення (читання) та виведення (запису) інформації в логічних програмах, створених засобами мови Пролог.

65

3.КОНТРОЛЬНІ ПИТАННЯ

1.Охарактеризуйте особливості реалізації в Пролог-програмах арифметичних операцій.

2. Виконайте короткий огляд методів і засобів реализації ітераційних

ірекурсивних операцій у процесі логічного програмування мовою Пролог.

3.Яку роль у Пролог-програмах, призначених для розв`язування типових прикладних задач, відіграють правила повторення, та як вони реалізуються ?

4.Який синтаксис і семантику мають у Пролозі предикати cut і fail ?

5.Наведіть наочний приклад Пролог-програми, що використовує предикати cut і fail.

6.Який спектр можливостей введення та виведення інформації забезпечує Пролог ?

7.Охарактеризуйте стандартні предикати Прологу, призначені для введення (читання) інформації.

8.Які особливості має предикат readterm ?

9.Охарактеризуйте стандартні предикати Прологу, призначені для виведення (запису) інформації.

10.Наведіть приклад Пролог-програми, що здійснює введення та виведення інформацiї за допомогою стандартних предикатів.

4.ЗАВДАННЯ ДЛЯ САМОПЕРЕВІРКИ

Завдання 1. Запустіть на виконання та проаналізуйте результати роботи наступних Пролог-програм, наведених у розділі 2 «Основні теоретичні відомості» даних методичних рекомендацій:

а) програма «Числа» (див. лістинг 1); б) програма «Міста США» (див. лістинг 2);

в) програма «Службовці з погодинною оплатою» (див. лістинг 3);

66

г) програма «Список імен дітей» (див. лістинг 4); д) програма «Вибрані імена дітей» (див. лістинг 5);

е) програма "Input and output of information" (див. лістинг 6).

5.КОНТРОЛЬНІ ЗАВДАННЯ

5.1.КОНТРОЛЬНЕ ЗАВДАННЯ 1

Варіант 1.

Модифікуйте наведену вище Пролог-програму «Числа» (див. лістинг 1), написавши додаткове правило для складання чотирьох десяткових чисел. Запустіть модифіковану вами програму та проаналізуйте результати її роботи.

Варіант 2.

Відкорегуйте наведену вище програму «Міста США» (див. лістинг 2) таким чином, щоб результатом її роботи була видача на екран дев'яти цілих чисел (наприклад, 66, 46, 32, 93, 44, 98, 37, 16, 12) по одному числу в рядку.

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

Запустіть модифіковану вами Пролог-програму та проаналізуйте результати її роботи.

Варіант 3.

Напишіть правило для видачі на екран списку всіх службовців жіночої статі, використовуючи Пролог-програму «Службовці з погодинною оплатою» (див. лістинг 3). Для тієї ж програми напишіть правило генерації списку всіх службовців, в яких погодинна оплата складає 5 доларів. Запустіть модифіковану вами Пролог-програму та проаналізуйте результати її роботи.

67

Варіант 4.

Напишіть програму "Платіжна відомість". Програма, що формує платіжну відомість, має стати розширенням програми про службовців (див. лістинг 3).

У даній програмі предикат employee повинен мати п`ять об`єктів: /* службовець (ім`я, стать, відділ, погодинна_оплата, години) */ employee(name,sex,department,pay_rate,hours)

Об`єкти pay_rate (погодинна оплата), hours (години) та gross_pay (виплата) повинні належати домену типу real, а тому над ними можна буде виконувати операції десяткової арифметики.

Правило для обчислення виплати повинне бути несладним і мати наступний формат: compute_gross_pay(Pay_rate, Hours, Gross_pay) :- ...

Задача правила make_pay_roll_report (видати звіт про виплати) полягає в формуванні звіту (зокрема, воно має викликати зазначене вище правило обчислення виплати compute_gross_pay):

make_pay_roll_report :- employee(Name,_,Dept,Pay_rate,Hours), compute_gross_pay(Pay_rate,Hours,Gross_pay), write(Name,Dept," $", Gross_pay).

Запустіть створену вами Пролог-програму та проаналізуйте результати її роботи.

Варіант 5.

Створіть, взявши за основу лістинг 3, Пролог-програму, що формує звіт про продажі, здійснені крамницею взуття, враховуючи наступні домовленості:

взуттєва крамниця фіксує кількість взуття, проданого протягом дня;

дані про продаж взуття містять індекс товару, його ціну, продану кількість пар взуття певного типу, розмір;

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

Запустіть створену вами Пролог-програму та проаналізуйте результати її роботи.

68

Варіант 6.

Змініть правило make_cut у програмі, що формує список імен дітей (лістинг 4) так, щоб воно видавало список імен дітей до імені Peter включно.

Модифікуйте Пролог-програму, що формує список імен дітей:

а) додайте предикат формату child(First_name, last_name), який для окремих дітей буде містити як перше, так і друге ім`я дитини;

б) розширте набір тверджень так, щоб включити до нього перше та друге ім`я для всіх дітей;

в) напишіть правило для видачі на екран повних імен тих дітей, другим ім`ям яких є Smith (Сміт);

г) напишіть правило для видачі на екран повного імені дитини, якщо її першим ім`я є Alice;

Запустіть Пролог-програму та проаналізуйте результати її роботи.

Варіант 7.

Модифікуйте програму лістингу 6 для іншої структури введення та виведення інфориації.

5.2. КОНТРОЛЬНЕ ЗАВДАННЯ 2

Підзавдання 2.1.

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

Підзавдання 2.2.

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

69

У процесі створення правил, обов'язково застосуйте предикати для формування коротких цільових запитів, предикат not, складені об'єкти, арифметичні операції, методи повторення на основі ітераційних і рекурсивних операцій, предикати cut (!) і fail.

Підзавдання 3.3.

Удоскональте Пролог-програму, що була розроблена вами під час виконання підзавдання 3.2, посиливши функції введення та виведення інформації на основі комплексного застосування стандартних предикатів Прологу readint, readreal, readchar, readln, readterm, write, nl.

Таблиця 3

Варіанти тем для виконання контрольного завдання 3

Номер

Найменування тем для виконання завдання 1

варіанту

 

 

 

 

Набір тем № 1

 

 

1

Центральні процесори

 

 

2

Математичні співпроцесори

 

 

3

Спеціалізовані графічні процесори

 

 

4

Материнські плати

 

 

5

Відеокарти

 

 

6

Оперативна пам'ять

 

 

7

Спеціалізована графічна пам'ять

 

 

8

Жорсткі диски

 

 

9

Компакт-диски

 

 

10

Приводи для роботи з компакт-дисками

 

 

11

Адаптери

 

 

70

12

Кулери

 

 

13

Корпуси комп`ютерів

 

 

14

Графічні планшети

 

 

15

Сканери

 

 

16

Цифрові фотокамери

 

 

17

Цифрові відеокамери

 

 

18

Веб-камери

 

 

19

Монітори

 

 

20

Проектори

 

 

21

Інша тема (за узгодженням із викладачем)

 

 

 

Набір тем № 2

 

 

1

Принтери

 

 

2

Плотери

 

 

3

Копіри

 

 

4

Багатофункціональні пристрої

 

 

5

Графічні робочі столи

 

 

6

Мінітипографії

 

 

7

Домашні кінотеатри

 

 

8

Стереогарнітури

 

 

9

Медіа-плеєри

 

 

10

Стереоскопічне обладнання та спорядження

 

 

11

Моноблочні комп`ютери

 

 

12

Мережні пристрої

 

 

13

Планшетні комп`ютери

 

 

14

Мобільні телефони

 

 

15

Графічні робочі станції