Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Logic tasks on TurboProlog.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.27 Mб
Скачать

Заключение

В результате выполнения данной лабораторной работы, были изучены основы языка программирования высокого уровня Turbo Prolog, а также интерфейс программы, разработанной компанией Borland International. Была решена выданная задача по поиску вариантов переправы на другой берег согласно условию.

  1. 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 и интерфейс соответствующего пакета программ. Была решена логическая задача определения знания языков и владения инструментами друзей.

  1. Задание

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. Была решена выданная задача определения соответствия месяцев с камнями и их значениями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]