Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Методичні вказівки

Тип роботи: 
Методичні вказівки
К-сть сторінок: 
44
Мова: 
Українська
Оцінка: 

місце(X,[2,3],[2,1,3]). X = 1 ;

No
Приклад
Предикат перестановка видає списки, отримані перестановкою елементів свого першого аргументу.
перестановка([],[]).
перестановка([H|L],Z):- перестановка(L,Y), місце(H,Y,Z).
Приклад використання:
?- перестановка([a,b,c],X). X = [a, b, c] ;
X = [b, a, c] ;
X = [b, c, a] ; X = [a, c, b] ; X = [c, a, b] ; X = [c, b, a] ; No
І, нарешті, приведемо правило для друку всіх можливих перестановок списку:
всіперестановки(L):- перестановка(L,R), write(R), nl, fail.
Перша підціль предиката обчислює чергову перестановку, друкує її й переходить до останньої підцілі - fail. Ця підціль завжди неуспішна, що змушує Пролог повернутися до початку правила й продовжити пошук рішення. Робота процедури завершиться, коли всі перестановки будуть вичерпані:
?- всі_перестановки(['маркіза', 'ваші прекрасні очі',
|            'обіцяють мені смерть від любові']).
[маркіза, ваші прекрасні очі, обіцяють мені смерть від любові] [ваші прекрасні очі, маркіза, обіцяють мені смерть від любові] [ваші прекрасні очі, обіцяють мені смерть від любові, маркіза] [маркіза, обіцяють мені смерть від любові, ваші прекрасні очі] [обіцяють мені смерть від любові, маркіза, ваші прекрасні очі] [обіцяють мені смерть від любові, ваші прекрасні очі, маркіза]
No
Приклад
У давньояпонському календарі був прийнятий 60-річний цикл, що складається з п'яти 12-річних підциклів. Підцикли позначалися назвами
кольорів: зелений, червоний, жовтий, білий і чорний. Усередині кожного підцикла роки носили назви тварин: пацюк, корова, тигр, заєць, дракон, змія, кінь, вівця, мавпа, курка, собака й свиня. Наприклад, 1984 рік - рік початку чергового циклу - називався Роком Зеленого Пацюка.
Складемо програму, що по заданому номеру року нашої ери n друкує його назву в давньояпоському календарі. Розглянемо два випадки:
(1) значення n не менше, ніж 1984;
(2) значення n - будь-яке натуральне число.
Скористаємося вбудованим предикатом nth0(індекс, список, елемент), що буде успішним, якщо елемент перебуває на місці з номером індекс, вважаючи
від 0. Для випадку (1) використаємо предикат nam, для випадку (2) предикат -
nm.
color(N,X):- N1 is ((N-1984) mod 60)//12, nth0(N1, ['зелений',
'червоний', 'жовтий',
'білий', 'чорний'],
X).
animal(N,X):- N1 is (N-1984) mod 12, nth0(N1,
['пацюк','корова', 'тигр',
'заєць','дракон', 'змія',
'кінь', 'вівця','мавпа',
'курка', 'собака', 'свиня'], X).
nam(N,[X,Y]):- number(N), color(N,X), animal(N,Y). nm(N,X):- N>1983, nam(N,X).
nm(N,X):- N<1984, N1 is N+60, nm(N1,X).
 
Частина 2. ЛАБОРАТОРНІ РОБОТИ
 
Лабораторна робота 1. НАПИСАННЯ ПРОСТОЇ ПРОГРАМИ НА МОВІ
GNU-PROLOG
 
Мета роботи: отримання практичних навичок складання, доопрацювання та виконання простої програми в системі програмування GNU-PROLOG.
Завдання:
1. Проінсталювати на власному комп'ютері систему програмування GNU- PROLOG та систему редагування текстів программ SciTE (Science Text Editor).
2. Скласти на мові Prolog дерево родинних відношень, використовуючи предикат roditel з двома параметрами: ім'я одного з батьків та ім'я дитини. Написати на мові Prolog та запустити наступні запити:
•“Хто є і батьками, і має батьків”
•“Хто не має дітей”
Наприклад: для схеми родинних зв'язків
програма буде мати вигляд:
roditel(`иван`,`нина`). roditel(`иван`,`олег`).
roditel(`анна`,`нина`). roditel(`анна`,`олег`). roditel(`олег`,`лариса`). roditel(`олег`,`алла`). roditel(`вера`,`алла`). roditel(`вера`,`лариса`). roditel(`лариса`,`наталья`). roditel(`виктор`,`наталья`).
3. Склад звіту про виконання лабораторної роботи:
•Назва, мета та завдання лабораторної роботи
•Зміст індивідуального завдання
•Графічне зображення родинних зв'язків з предикатом
•Програма на мові Prolog
•Скріншоти виконання програми та запитів на завантажених правилах
Індивідуальні завдання до лабораторної роботи 1.
 
ФОРМУВАННЯ ПРАВИЛ
 
Мета роботи: отримання практичних навичок складення правил та використання їх в програмі в системі програмування GNU-PROLOG.
Завдання:
1. Програму з лабораторної роботи 1 доповнити новими фактами, що дозволяють побудувати правила для визначення наступних цілей-предикатів:
•батько
•мати
•син
•дочка
•брат
•сестра
•дядько
•тітка
•дід
•баба
•онук
•онучка
•небіж
•небога
2. Склад звіту про виконання лабораторної роботи:
•Назва, мета та завдання лабораторної роботи
•Зміст індивідуального завдання
•Графічне зображення родинних зв'язків з відповідними предикатами
•Програма на мові Prolog
•Скріншоти виконання програми та запитів на завантажених правилах
 
РЕКУРСІЯ
 
Мета роботи: отримання практичних навичок складення та доопрацювання програм з використанням рекурсії.
Завдання:
1. Підсумувати цілі позитивні числа, які йдуть одне за другим з кроком d, та закінчуються числом n. Значення d та n вводяться за запитом з екрану монітора (наприклад, d=3 та n=11, підсумок 11+8+5+2=26). У випадку d>=n підсумок дорівнює n.
2. Звести число a у цілий ступінь m (m може бути позитивним, нульовим або негативним). Скласти два варіанти програми:
а) використовуючи рекурсивний вираз a^m=a^(m-1)*a;
б) використовуючи можливість обчислень за формулою
a^(2*m)=a^m*a^m для парного ступеня.
Визначити максимальний ступінь, у який можна звести число a=2 по першому й другому варіантах програми. Результати й причини їхнього розходження відобразити у висновках звіту.
3. Знайти підсумок цілих послідовних чисел від 0 до N.
4. Обчислити значення наступних функцій, використовуючи розкладання
в ряд (в ітеративному варіанті програми задавати точність обчислення функції):
2 / 6=11 / 221 / 32 …1 / k2 …
5. Склад звіту про виконання лабораторної роботи:
•Назва, мета та завдання лабораторної роботи
•Зміст індивідуального завдання
•Програми на мові Prolog
•Скріншоти виконання програм та запитів на завантажених правилах
 
Індивідуальні завдання до лабораторної роботи 3.
 
Лабораторна робота 4.
 
ВИКОРИСТАННЯ ВІДСІКАННЯ У ПРОЛОГ- ПРОГРАМАХ
 
Мета роботи: отримання практичних навичок використання відсікання у програмах.
Завдання:
1. Визначити віковий статус людини за відомим роком народження у відповідності до таблиці. Розробити два варіанти: без відсікання та з його використанням.
2. Склад звіту про виконання лабораторної роботи:
•Назва, мета та завдання лабораторної роботи
•Зміст індивідуального завдання
•Програми на мові Prolog
•Скріншоти виконання програм та запитів на завантажених правилах
Індивідуальні завдання до лабораторної роботи 4.
 
Лабораторна робота 5.
 
РОБОТА ЗІ СПИСКАМИ
 
Мета роботи: отримання практичних навичок роботи зі списками у програмах.
Завдання:
1. Зі списку L1 отримати список L2, черговий елемент якого дорівнює середньому арифметичному чергової трійки елементів списку L1 . Якщо кількість елементів L1 не кратна 3, то останній елемент списку L2 отримується діленням на 3 одного або підсумку двох останніх елементів списку L1 . Список L1 вводиться за підказкою з екрану. У підсумку виконання програми повинні виводитися вхідний L1 та результуючий L2 списки.
2. Провести циклічний зсув елементів списку на n позицій у напрямку(
LR). Кількість елементів у списку — m. Елементи списку вводяться за запитом.
. Склад звіту про виконання лабораторної роботи:
•Назва, мета та завдання лабораторної роботи
•Зміст індивідуального завдання
•Програми на мові Prolog
•Скріншоти виконання програм та запитів на завантажених правилах
Індивідуальні завдання до лабораторної роботи 5.
 
 
 
Фото Капча