
- •Лабораторне заняття № 1
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 2
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 3
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 4
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 5
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 6
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 7
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 8
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 9
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 10
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 11
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 12
- •1. Теоретичні відомості
- •1. Стара графіка.
- •2. Черепахова графіка (Turtle graphics).
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 13
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 14
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 15
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •Лабораторне заняття № 16
- •1. Теоретичні відомості
- •2. Практична частина
- •2.1. Програма роботи та завдання.
- •43018, М. Луцьк, вул.Львівська, 75
2.1. Програма роботи та завдання.
2.1.1. Створити в середовищі Turbo Prolog програму подібну прикладу 1 та дослідити її.
2.1.2. Задати різні варіанти цілей та проаналізувати отримані результати.
2.1.3. Дослідити програму з прикладу 2. Зафіксувати результати.
2.1.4. Дослідити програму прикладу 3 з подальшою модифікацією за вибором студента.
2.1.5. Зафіксувати у звіті вихідні коди створених програм та логіку їх роботи.
2.1.6. Відповісти письмово на контрольні питання.
Контрольні питання:
1) Що таке база даних?
2) Предикати для роботи із БД?
3) Способи представлення баз даних в системі Turbo Prolog?
Лабораторне заняття № 14
Тема: Стандартна задача про розміщення королев на шахівниці
Мета роботи. Дослідити роботу програми для розв’язання задачі про розміщення королев для різного числа рядків і стовпців; проаналізувати отримані результати.
1. Теоретичні відомості
Задача про N королев формулюється наступним чином. Необхідно розставити на шахівниці N королев таким чином , щоб ніякі дві королеви не змогли побити одна одну згідно правил гри в шахи. Тому, ніякі дві королеви не можуть бути розміщені в одному ряду: по вертикалі , горизонталі , діагоналі.
Для розв’язання задачі, пронумеруємо вертикальні та горизонтальні рядки шахової дошки від 1 до N. Для нумерації діагоналі, розділимо їх на два типи таким чином, щоб діагональ специфицифікувалась типом і номером, які обчислюються із її вертикальних і горизонтальних рядів:
Diagonal = N + Column - Row (type 1)
Diagonal = Row + Column - 1 (type 2)
Якщо ви дивитесь на шахівницю, на ряд 1 по горизонталі та колонку 1 по вертикалі з лівої сторони , тоді Tun1 розділяє діагоналлю клітку як символ похилої риски вліво (\), а Tun2 - вправо (/). Малюнок демонструє нумерацію діагоналей Tunу2 на дошці 4х4.
| 1 | 2 | 3 | 4 |
1 | 1 | 2 | 3 | 4 |
2 | 2 | 3 | 4 | 5 |
3 | 3 | 4 | 5 | 6 |
4 | 4 | 5 | 6 | 7 |
Нумерація діагоналей Типу2 на шахівниці.
2. Практична частина
domains
queen = q(integer, integer)
queens = queen*
freelist = integer*
board = board(queens, freelist, freelist, freelist, freelist)
predicates
placeN(integer, board, board)
place_a_queen(integer, board, board)
nqueens(integer)
makelist(integer, freelist)
findandremove(integer, freelist, freelist)
nextrow(integer, freelist, freelist)
clauses
nqueens(N) :-
makelist(N, L),
Diagonal = N*2-1,
makelist(Diagonal, LL),
placeN(N, board([], L, L, LL, LL), Final),
write(Final).
placeN(_,
board(D, [], [], D1, D2),
board(D, [], [], D1, D2)):- !.
placeN(N, Board1, Result) :-
place_a_queen(N, Board1, Board2),
placeN(N, Board2, Result).
place_a_queen(N, board(Queens, Rows, Columns, Diag1, Diag2),
board([q(R,C)|Queens], NewR, NewC, NewD1, NewD2)):-
nextrow(R, Rows, NewR), findandremove(C, Columns, NewC),
D1 = N+C-R, findandremove(D1, Diag1, NewD1), D2 = R+C-1,
findandremove(D2, Diag2, NewD2).
findandremove(X, [X|Rest], Rest).
findandremove(X, [Y|Rest], [Y|Tail]):- findandremove(X, Rest, Tail).
makelist(1, [1]).
makelist(N, [N|Rest]) :- N1 = N-1, makelist(N1, Rest).
nextrow(Row, [Row|Rest], Rest).