Заключение
В результате выполнения данной лабораторной работы, были изучены основы языка программирования высокого уровня Turbo Prolog, а также интерфейс программы, разработанной компанией Borland International. Была решена выданная задача по поиску вариантов переправы на другой берег согласно условию.
Four friends A,B,C,D play everyone on one of tools: a flute, a grand piano, a guitar and a violin. Each of friends owns one of foreign languages: English, French, German and Spanish. It is known, that:
The young man playing on a guitar, speaks in Spanish;
B does not play neither on a violin, nor on a flute, no on a grand piano;
A does not play neither on a violin, nor on a flute and does not know English;
C speaks in French, but does not play on a violin.
Who on what tool plays and in what language speaks?
Задание
Четыре друга А, В, С, D играют каждый на одном из инструментов: флейте, рояле, гитаре и скрипке. Каждый из друзей владеет одним из иностранных языков: английским, французским, немецким и испанским. Известно, что:
а) юноша, играющий на гитаре, говорит по-испански;
б) В не играет ни на скрипке, ни на флейте, ни на рояле;
в) Aне играет ни на скрипке, ни на флейте и не знает английского;
г) D говорит по-французски, но не играет на скрипке.
Кто на каком инструменте играет, и на каком языке говорит?
Описание программы
Программа определяет, на каких языках говорит каждый из друзей, и на каких инструментах они играют. Введите следующий запрос: rezult, и будет получен результат, показанный на Рис. 1.
Рис. 1 – Выполнение программы
Для удобства получения ответа при запуске программы, был реализован предикат result (Рис. 2). Использование данного предиката в программе выводит результат работы сразу в диалоговое окно.
Рис. 2 – Выполнение программы с предикатом rezult
Ниже представлен текст программы:
predicates drug(string). instrument(string). language(string). otvet1(string,string). otvet2(string,string). rezult.
clauses drug(a). drug(b). drug(c). drug(d).
instrument(fleyta). instrument(royal). instrument(gitara). instrument(skripka).
language(ang). language(isp). language(nem). language(fra).
otvet1(X,Y) :- drug(X), instrument(Y), X=b, not(Y=fleyta), not(Y=royal), not(Y=skripka).
otvet1(X,Y) :- drug(X), instrument(Y), X=a, not(Y=fleyta), not(Y=skripka), not(otvet1(b,Y)).
otvet1(X,Y) :- drug(X), instrument(Y), X=d, not(Y=skripka), not(otvet1(a,Y)), not(otvet1(b,Y)).
otvet1(X,Y) :- drug(X), instrument(Y), X=c, not(otvet1(b,Y)), not(otvet1(a,Y)), not(otvet1(d,Y)).
otvet2(X,Y) :- drug(X), language(Y), otvet1(X,gitara), Y=isp.
otvet2(X,Y) :- drug(X), language(Y), X=d,Y=fra.
otvet2(X,Y) :- drug(X), language(Y), X=a, not(Y=ang), otvet1(Z,gitara), not(otvet2(Z,Y)),not(otvet2(d,Y)).
otvet2(X,Y) :- drug(X), language(Y), X=c, otvet1(Z,gitara), not(otvet2(Z,Y)), not(otvet2(d,Y)), not(otvet2(a,Y)).
rezult :- nl, otvet1(a,X), otvet2(a,Y), write("A igraet na: ", X, "\nA govorit na: ", Y), nl, otvet1(b,N), otvet2(b,M), write("B igraet na: ", N, "\nB govorit na: ", M), nl, otvet1(c,K), otvet2(c,F), write("C igraet na: ", K, "\nC govorit na: ", F), nl, otvet1(d,P), otvet2(d,R), write("D igraet na: ", P, "\nD govorit na: ", R), nl.
goal rezult. |
Заключение
В результате выполнения лабораторной работы, были изучены основы языка программирования высокого уровня Turbo Prolog и интерфейс соответствующего пакета программ. Была решена логическая задача определения знания языков и владения инструментами друзей.
Задание
On ancient telling, each month has a stone-talisman. So, June, July and September correspond to a ruby stones, sapphire and pearls accordingly. These stones accordingly mean wisdom, health and well-being. For what month correspond what stone and what it means, if it is known, that:
The pearls and a ruby mismatch September;
Wisdom it is not observed in June and July;
Health mismatches a ruby;
На языке TurboProlog реализовать решение задачи: По древнему поверью, у каждого месяца есть свой камень-талисман. Так, июню, июлю и сентябрю соответствуют камни рубин, сапфир и жемчуг. Эти камни означают мудрость, здоровье и благополучие. У какого месяца, какой камень-талисман. и что он означает, если известно, что
а) жемчуг и рубин не соответствуют сентябрю;
б) в июне и июле мудрости не наблюдается;
в) здоровье не соответствует рубину;
г) благополучие не относится к июню.
Описание программы
Программа, написанная на языке TurboProlog, определяет, у какого месяца какой камень-талисман, и что этот камень обозначает.
Для того, чтобы решить задачу, нужно в форме ввести слово «otvet».
Рис. 1 – Выполнение программы
Кодпрограммы:
domains Stone,Month,Ability=symbol predicates stone(Stone) month(Month) ability(Ability) item(Stone,Month,Ability) otvet clauses stone("Jemchug"). stone("Rubin"). stone("Saphire"). month("June"). month("July"). month("September"). ability("Health"). ability("Wisdom"). ability("Wellbeing"). item(S,M,A):- stone(S),month(M),ability(A). otvet:- item("Jemchug",X1 ,Y1), item("Rubin",X2 ,Y2), item("Saphire",X3 ,Y3), X1<>X2,X1<>X3, X1<>"June",X1<>"September", X2<>"July",X2<>"September", X3<>"July",X3<>"June", Y1<>Y2,Y1<>Y3, Y1<>"Wisdom",Y1<>"Health", Y2<>"Wellbeing",Y2<>"Wisdom", Y3<>"Health",Y3<>"Wellbeing", write("Rubin - ",X1 ,Y1,"\n", "Jemchug - ",X2 ,Y2,"\n", "Saphire - ",X3 ,Y3,"\n"),nl. |
Заключение
В результате выполнения данной лабораторной работы, были изучены основы языка программирования высокого уровня TurboProlog и интерфейс соответствующего пакета программ, разработанного компанией BorlandInternational. Была решена выданная задача определения соответствия месяцев с камнями и их значениями.
