
Завдання 6
Розробити автоматизовану СПР, яка вирішує задачу про Ханойські вежі.
Є три стержні, на якому розміщено Nкілець різного діаметру, при цьому, чим меншим є кільце, тим вище воно знаходиться.
Необхідно перемістити кільця із першого стержня на третій, переміщуючи за кожен крок лише один диск, при цьому не можна розміщувати диск більшого діаметру на диск меншого.
Рисунок – Ханойські вежі
СПР має виводити послідовність кроків для будь-якого заданого N.
Лістинг 3.1 – Код програми
hanoi(N):- move(N,left,middle,right).
move(1,A,_,C):- inform(A,C),!.
move(N,A,B,C):- N1 is N-1, move(N1,A,C,B), inform(A,C), move(N1,B,A,C).
inform(Loc1, Loc2):- nl, write('Move disk from '), write(Loc1), write(' to '),write(Loc2).
Виконання програми наведено на рисунку 3.1
Рисунок 3.1 – Приклад роботипрограми
Завдання 7
Розробити автоматизовану СПР, яка вирішує наступну задачу.
Зустрілося п’ятеро друзів, кожен із яких взяв кредит у банку певного міста. Їх зовуть Сергій, Борис, Леонід, Григорій та Віктор. Вони взяли кредити в наступних містах: Ризі, Пензі, Львові, Харкові та Москві. Кожен із них народився в одному з цих міст, однак ні один не брав кредит у місті, де він народився.
Відомі наступні факти:
Сергій взяв кредит у Ризі.
Борис родом із Риги, однак кредит він взяв у Пензі.
Віктор взяв кредит у Москві.
Григорій взяв кредит у Харкові.
Віктор родом із Львова.
Народжений у Пензі взяв кредит на родині Леоніда.
Завдання: визначити, хто із друзів народився у Москві?
друзья(X):- X=сегей; X=борис; X=виктор; X=григорий; X=леонид.
город(Y):- Y=рига; Y=пенза; Y=львов; Y=харьков; Y=москва.
fact(сегей,рига).
fact(борис,пенза).
fact(виктор,москва).
fact(григорий,харьков).
кредит(X,Y):- друзья(X),город(Y), fact(X,Y), ! ;
друзья(X),город(Y), not( fact(X, _ )),not(fact( _, Y)).
fact1(борис,рига). fact1(виктор,львов).
rodom_пенза(X) :- друзья(X), Z=пенза,not(fact1(X,_)),
город(U),not(U=Z),кредит(X,U),rodom(leo,U).
rodom(X,Z) :- друзья(X),город(Z),fact1(X,Z), ! ;
друзья(X),not(X=леонид),Z=пенза,rodom_пенза(X), !;
друзья(X),город(Z),not(fact1(_,Z)),X=леонид,not(Z=пенза),
друзья(K),not(fact1(K,_)),кредит(K,Z);
друзья(X),not(X=леонид),город(Z),not(Z=пенза),not(fact1(_,Z)),
not(fact1(X,_)), город(Y),not(Y=Z),кредит(X,Y),
not(rodom(леонид,Z)),not(rodom(леонид,Y)).
Завдання 8
Розробити автоматизовану СПР, яка вирішує наступну задачу.
У банка є п’ять важливих клієнтів, які мають щоденно відвідувати банк протягом тижня, але за виконання певних умов.
Якщо прийшли Андрій та Дмитро, то Бориса бути не повинно. Однак, якщо Дмитро не прийшов, то Борис бути повинен, а Віктор бути не повинен.
Якщо Віктор прийшов, то Андрія бути не повинно і навпаки.
Якщо прийшов Дмитро, то Григорія бути не повинно.
Якщо Бориса немає, то Дмитро має бути, однак за умови, що не має також і Віктора. Однак, якщо Віктор є, то Дмитра бути не має, однак має бути Григорій.
Кожен день клієнти мають відвідувати банк у певних сполученнях, які ці сполучення?
st_A(Андрей):-Андрей=пришел; Андрей=не_пришел.
st_D(Дмитрий):-Дмитрий=пришел; Дмитрий=не_пришел.
st_B(Борис):-Борис=пришел; Борис=не_пришел.
st_V(Виктор):-Виктор=пришел; Виктор=не_пришел.
st_G(Григорий):-Григорий=пришел; Григорий=не_пришел.
ogr1(пришел,_,_,не_пришел,_). ogr1(не_пришел,_,_,пришел,_).
ogr2(_,пришел,_,_,не_пришел). ogr2(_,не_пришел,_,_,_).
norm1(пришел,пришел,не_пришел,_,_).
norm2(пришел,пришел,пришел,не_пришел,_).
norm3(_,пришел,не_пришел,не_пришел,_).
norm4(_,не_пришел,не_пришел,пришел,пришел).
spisok(Андрей,Дмитрий,Борис,Виктор,Григорий):-st_A(Андрей),st_D(Дмитрий), st_B(Борис),st_V(Виктор),st_G(Григорий),
norm1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr2(Андрей,Дмитрий,Борис,Виктор,Григорий);
st_A(Андрей),st_D(Дмитрий), st_B(Виктор), st_V(Григорий), st_G(Григорий),
norm2(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr2(Андрей,Дмитрий,Борис,Виктор,Григорий);
st_A(Андрей), st_D(Дмитрий), st_B(Виктор),st_V(Григорий), st_G(Григорий),
norm3(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr2(Андрей,Дмитрий,Борис,Виктор,Григорий);
st_A(Андрей), st_D(Дмитрий), st_B(Виктор), st_V(Григорий), st_G(Григорий),
norm4(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr2(Андрей,Дмитрий,Борис,Виктор,Григорий);
st_A(Андрей), st_D(Дмитрий), st_B(Виктор), st_V(Григорий), st_G(Григорий),
not(norm1(Андрей,Дмитрий,Борис,Виктор,Григорий)), not(Андрей,Дмитрий,Борис,Виктор,Григорий),
not(norm3(Андрей,Дмитрий,Борис,Виктор,Григорий)), not(norm4(Андрей,Дмитрий,Борис,Виктор,Григорий)),
ogr1(Андрей,Дмитрий,Борис,Виктор,Григорий), ogr2(Андрей,Дмитрий,Борис,Виктор,Григорий).