Перейти к содержанию

Обсуждение участника:Vitaly~ruwikiversity

Содержимое страницы недоступно на других языках.
Добавить тему
Материал из Викиверситета

Комплекс лабораторных заданий для студентов ВУЗа

[править]

Лабораторное занятие №1

[править]

Задания к к ЛЗ № 1

[править]

Задание № 1

[править]

Перед запуском tuProlog необходимо проработать материал "Руководства по tuProlog".

Электронный вариант пособия - [1].

Материал для проработки Глава 4 параграфы 1 и 2.

Отводимое время - 20 мин

Задание № 2

[править]

После усвоения теоретического материала необходимо запустить tuProlog

Открыть примеры программ

Последовательно запуская каждую - определить их особенности

Выводы отразить в отчете.

Отводимое время 10 - 15 мин

Примеры к ЛЗ № 1

[править]

Пример №1

[править]

'русангл'('мама',mammy).

'русангл'('небо',sky).

'русангл'('солнце',sun).

'русангл'('мальчик',boy).

'русангл'('круг',ring).

Пример №2

[править]

'родитель'('Тамара','Наталья').

'родитель'('Надежда','Павел').

'родитель'('Александр','Павел').

'родитель'('Надежда','Вика').

Лабораторное занятие №2

[править]

Задания к ЛЗ №2

[править]

Задание 1

[править]

Загрузите программу LZ2TP1.PL.

Изучите ее структуру и проверьте работоспособность.

На основе данной программы создайте свою авторскую программу.

Задание 2

[править]

Поочередно загрузите программы LZ2TP2.PL и LZ2TP3.PL.

Изучите их структуру и проверьте работоспособность.

Определите какие структуры реализованы в данных программах.

Задание 3

[править]

Загрузите программу LZ2TP4.PL.

Изучите ее структуру и проверьте работоспособность.

Определите как в данной программе.

Примеры к ЛЗ № 2

[править]

Программа LZ2TP1.PL

[править]

predicates

likes(symbol,symbol) - nondeterm (i,i)

clauses

likes(ellen,tennis).

likes(john,football).

likes(tom,baseball).

likes(eric,swimming).

likes(mark,tennis).

likes(bill,Activity):-

likes(tom, Activity).

goal

likes(bill,baseball).

Программа LZ2TP2.PL

[править]

predicates

can_buy(symbol,symbol) - nondeterm (o,o)

person(symbol) - nondeterm (o)

car(symbol) - nondeterm (o)

likes(symbol,symbol) - nondeterm (i,i)

for_sale(symbol) - nondeterm (i)

clauses

can_buy(X,Y):-

person(X),

car(Y),

likes(X,Y),

for_sale(Y).

person(kelly).

person(judy).

person(ellen).

person(mark).

car(lemon).

car(hot_rod).

likes(kelly, hot_rod).

likes(judy, pizza).

likes(ellen, tennis).

likes(mark, tennis).

for_sale(pizza).

for_sale(lemon).

for_sale(hot_rod).

goal

can_buy(Who,What).

Программа LZ2TP3.PL

[править]

predicates

likes(symbol,symbol) - nondeterm (o,i), nondeterm (i,i)

clauses

likes(ellen,reading).

likes(john,computers).

likes(john,badminton).

likes(leonard,badminton).

likes(eric,swimming).

likes(eric,reading).

goal

likes(Person,reading),

likes(Person,swimming).

Программа LZ2TP4.PL

[править]

predicates

мужчина(symbol)

женщина(symbol)

родитель(symbol,symbol)- nondeterm (o,i)

clauses

мужчина(петя).

мужчина(вова).

женщина(ира).

женщина(юля).

родитель(петя,вова).

родитель(ира,вова).

родитель(вова,юля).

goal

родитель(Папа,юля).

Лабораторное занятие №3

[править]

Задания к ЛЗ №2

[править]

Задание 1

[править]

Загрузите программу LZ3TP1.PL.

Изучите ее структуру и проверьте работоспособность.

Обратите каким образом выводится информация в данной программе, используются ли специальные предикаты ввода/вывода.

Задание 2

[править]

Поочередно загрузите программы LZ3TP2.PL и LZ3TP3.PL.

Изучите их структуру и проверьте работоспособность.

Определите какие предикаты используются для вывода информации.

Задание 3

[править]

Загрузите программу LZ3TP4.PL.

Изучите ее структуру и проверьте работоспособность.

Определите как в данной программе осуществляется ввод информации.

Примеры к ЛЗ № 3

[править]

Программа LZ3TP1.PL

[править]

predicates

reshenie(real)

resheniea(real)

reshenieb(real)

clauses

reshenie (X):-

X=sin(3.141592653).

resheniea(Y):-

Y=cos(3.141592653).

reshenieb(V):-

V=exp(2.5).

goal

reshenie (X),

resheniea(Y),

reshenieb(V).

Программа LZ3TP2.PL

[править]

domains

treetype = tree(string, treetype, treetype) ; empty()

predicates

peresechenie(treetype) - procedure (i)

clauses

peresechenie (empty).

peresechenie (tree(Name,Left,Right)):-

write(Name,'\n'),

peresechenie (Left),

peresechenie (Right).

goal

peresechenie (tree("Cathy",

tree("Michael",

tree("Charles", empty, empty),

tree("Hazel", empty, empty)),

tree("Melody",

tree("Jim", empty, empty),

tree("Eleanor", empty, empty)))).

Программа LZ3TP3.PL

[править]

domains

treetype = tree(string,treetype,treetype) ; empty()

predicates

sozdanie_tree(string,treetype) - procedure (i,o)

vstavka_left(treetype,treetype,treetype) - determ (i,i,o)

vstavka_right(treetype,treetype,treetype) - determ (i,i,o)

run - determ ()

clauses

sozdanie_tree(A,tree(A,empty,empty)).

vstavka_left(X,tree(A,_,B),tree(A,X,B)).

vstavka_right(X,tree(A,B,_),tree(A,B,X)).

run:-

sozdanie_tree("Charles",Ch),

sozdanie_tree("Hazel",H),

sozdanie_tree("Michael",Mi),

sozdanie_tree("Jim",J),

sozdanie_tree("Eleanor",E),

sozdanie_tree("Melody",Me),

sozdanie_tree("Cathy",Ca),

vstavka_left(Ch, Mi, Mi2),

vstavka_right(H, Mi2, Mi3),

vstavka_left(J, Me, Me2),

vstavka_right(E, Me2, Me3),

vstavka_left(Mi3, Ca, Ca2),

vstavka_right(Me3, Ca2, Ca3),

write(Ca3,'\n').

goal

run.

Программа LZ3TP4.PL

[править]

domains

chartree = tree(char, chartree, chartree); end

predicates

do(chartree) - nondeterm (i)

dejstvie(char,chartree,chartree) - determ (i,i,o)

sozdanie_tree(chartree,chartree) - procedure (i,o)

vstavka (char,chartree,chartree) - procedure (i,i,o)

write_tree(chartree) - procedure (i)

repeat - nondeterm ()

clauses

do(Tree):-

repeat,nl,

write("*******************************************************"),nl,

write("Enter 1 to update tree\n"),

write("Enter 2 to show tree\n"),

write("Enter 7 to exit\n"),

write("*******************************************************"),nl,

write("Enter number - "),

readchar(X),nl,

dejstvie (X, Tree, NewTree),

do(NewTree).

dejstvie ('1',Tree,NewTree):-

write("Enter characters or # to end: "),

sozdanie_Tree(Tree, NewTree).

dejstvie ('2',Tree,Tree):-

write_Tree(Tree),

write("\nPress a key to continue"),

readchar(_),nl.

dejstvie ('7', _, end):-

exit.

sozdanie_Tree(Tree, NewTree):-

readchar(C),

C<>'#',!,

write(C, " "),

vstavka (C, Tree, TempTree),

sozdanie_Tree(TempTree, NewTree).

sozdanie_Tree(Tree, Tree).

vstavka (New,end,tree(New,end,end)):-!.

vstavka (New,tree(Element,Left,Right),tree(Element,NewLeft,Right)):-

New<Element,!,

vstavka (New,Left,NewLeft).

vstavka (New,tree(Element,Left,Right),tree(Element,Left,NewRight)):-

vstavka (New,Right,NewRight).

write_Tree(end).

write_Tree(tree(Item,Left,Right)):-

write_Tree(Left),

write(Item, " "),

write_Tree(Right).

repeat.

repeat:-repeat.

goal

write("*************** Character tree sort *******************"),nl,

do(end).

Комплекс лабораторных заданий для учеников средних общеобразовательных учреждений

[править]

Типы заданий

[править]

¤ Дан определенный фрагмент программы, необходимо придерживаясь условия задачи дописать ее;

¤ Дана не рабочая программа, необходимо руководствуясь условием задачи исправить ошибки и привести ее в работоспособное состояние;

¤ Дана программа, необходимо расширить ее функциональность, путем добавления в нее новых конструкций.

Набор задач

[править]

Наибольший общий делитель

[править]

нод(a,a,a).

нод(a,b,c):-БОЛЬШЕ(a,b),нод(#a-b#,b,c).

нод(a,b,c):-БОЛЬШЕ(b,a),нод(a,#b-a#,c).

? - нод(256,96,x).

Число Фибоначчи

[править]

fib(1,0,1):-!.

fib(N,G,F):- СЛОЖЕНИЕ(I,1,N),fib(I,H,G),СЛОЖЕНИЕ(H,G,F).

fi(L,K):-fib(L,_,K),!.

? - fi(25,q).

Квадратный корень

[править]

sqrt(0,0):-!.

sqrt(1,1):-!.

sqrt(x,y):-sqrt1(x,y,1.).

sqrt1(x,y,a):-РАВНО(#(x/a-a)/2.#,z),abs(z,b),БОЛЬШЕ(#b/a#,0.000005),!,sqrt1(x,y,#a+z#).

sqrt1(x,a,a).

abs(x,y):-МЕНЬШЕ(x,0),!,РАВНО(y,#-1*x#).

abs(x,x).

? - sqrt(17.35,q).

Укладка ранца

[править]

ranez([a|B],c,[a|D]):-НЕ(БОЛЬШЕ(a,c)),ranez(B,#c-a#,D).

ranez([_|B],c,D):-ranez(B,c,D).

ranez([],0,[]).

? - ranez([1,3,6,5,2,3,4,7,9,13,15,17,19],20,V).

Волк, коза и капуста

[править]

перевоз([],на_правом',справа,история'):-решение([[[],на_правом',справа]|история']),!.

перевоз(на_левом',на_правом',слева,история'):-

РАВНО([на_левом',на_правом',слева],запись'),НЕ(элемент(запись',история')),

выделить(в_лодку',на_левом',ост_слева'),можно(ост_слева'),

перевоз(ост_слева',[в_лодку'|на_правом'],справа,[запись'|история']).

перевоз(на_левом',на_правом',справа,история'):-можно(на_правом'),

РАВНО([на_левом',на_правом',справа],запись'),НЕ(элемент(запись',история')),

перевоз(на_левом',на_правом',слева,[запись'|история']).

перевоз(на_левом',на_правом',справа,история'):-

РАВНО([на_левом',на_правом',справа],запись'),НЕ(элемент(запись',история')),

выделить(в_лодку',на_правом',ост_справа'),можно(ост_справа'),

перевоз([в_лодку'|на_левом'],ост_справа',слева,[запись'|история']).

можно([волк,капуста]).

можно([капуста,волк]).

можно([л]).

можно([]).

выделить(Элемент',[Элемент'|Остальные'],Остальные').

выделить(Элем',[ДрЭлем'|Спис'],[ДрЭлем'|ДрСпис']):-выделить(Элем',Спис',ДрСпис').

элемент(х,[х|_]).

элемент(х,[_|у]):- элемент(х,у).

присоединить([],a,a).

присоединить([x|a],b,[x|c]):-присоединить(a,b,c).

обращение([],[]).

обращение([a|b],x):- обращение(b,c),присоединить(c,[a],x).

решение(а):-обращение(а,б),печать(б).

печать([]).

печать([[а,б,в]|г]):-ВЫВОД("Слева ",а,", Справа ",б,", Лодка - ",в),печать(г).

? - перевоз([волк,коза,капуста],[],слева,[]).

Ваша учётная запись будет переименована

[править]

08:08, 20 марта 2015 (UTC)

Учётная запись переименована

[править]

10:38, 19 апреля 2015 (UTC)