Логічне та функціональне програмування

Методи використання предикатів Cut, Fail. Організація циклу (repeat), складання програми. Алгоритм роботи зі списками та рядками. Елементарні операції і базові функції мови програмування Лісп. Робота зі складними типами даних на прикладі бази даних АТС.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 17.06.2011
Размер файла 219,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

Черкаський державний технологічний університет

Кафедра програмного забезпечення

Контрольна робота

«Логічне та функціональне програмування»

Черкаси 2009 р.

Завдання №1

Тема: Бектрекінг управління бектрекінгом

Мета: Засвоїти методи використання предикатів Cut, Fail

Завдання: Взяти БД з лабораторної роботи №1 і на потрібному місті поставити предикати Cut, Fail.

domains

s=string

predicates

man(s)

woman(s)

parents(s,s)

mother(s,s)

father(s,s)

brother(s,s)

sister(s,s)

grandmother(s,s)

grandfather(s,s)

uncl(s,s)

aunt(s,s)

cusin(s,s)

cusina(s,s)

vnuk(s,s)

vnuchka(s,s)

clauses

man("Ivan").

man("Pavel").

man("Oleksandr").

man("Sergey").

man("Yaroslav").

man("Oleksandr m").

man("Viktor").

woman("Ekaterina").

woman("Ludmila").

woman("Ekaterina m").

woman("Yulia").

woman("Olga").

parents("Ivan","Oleksandr").

parents("Ivan","Ludmila").

parents("Ivan","Pavel").

parents("Ekaterina","Oleksandr").

parents("Ekaterina","Ludmila").

parents("Ekaterina","Pavel").

parents("Oleksandr","Sergey").

parents("Olga","Sergey").

parents("Ludmila","Yaroslav").

parents("Viktor","Yaroslav").

parents("Pavel","Oleksandr m").

parents("Pavel","Ekaterina m").

parents("Yulia","Oleksandr m").

parents("Yulia","Ekaterina m").

mother(X,Y):-parents(X,Y),woman(X).

father(X,Y):-parents(X,Y),man(X).

brother(X,Y):-parents(Z,X),parents(Z,Y),X<>Y,man(X).

sister(X,Y):-parents(Z,X),parents(Z,Y),X<>Y,woman(X).

grandmother(X,Y):-parents(Z,Y),parents(X,Z),woman(X).

grandfather(X,Y):-parents(Z,Y),parents(X,Z),man(X).

uncl(X,Y):-parents(Z,Y),brother(X,Z),man(X).

aunt(X,Y):-parents(Z,Y),sister(X,Z),woman(X).

cusin(X,Y):-parents(Z,Q),parents(Z,W),parents(Q,X),parents(W,Y),Q<>W,X<>Y,man(X).

cusina(X,Y):-parents(Z,Q),parents(Z,W),parents(Q,X),parents(W,Y),Q<>W,W<>Y,woman(X).

vnuk(X,Y):-grandmother(Y,X),man(X).

vnuchka(X,Y):-grandmother(Y,X),woman(X).

goal

clearwindow,vnuk(X,Y),write(X," vnuk ",Y),nl,fail.

%clearwindow,vnuk(X,Y),write(X," vnuk ",Y),!,nl,fail.

Результати роботи програми:

Sergey vnuk Ekaterina

Yaroslav vnuk Ekaterina

Oleksandr m vnuk Ekaterina

Завдання №2

Тема: Метод повтору

Мета: Організація циклу (repeat)

Завдання: Написати базу данних, яка вміщує не меньше ніж 20 фактів

Результати роботи програми виввести у різні вікна передбачивши довільне переключення між вікнами (3 - 4 вікна) за допомогою предиката

repeat

domains

num=integer

source=integer*

str=integer*

predicates

main

menu

laptop(string,string,integer)

repeat

choice(num)

clauses

laptop("Acer","eMachines D620",280).

laptop("ASUS","Eee PC 900",253).

laptop("Acer","Aspire One A110-Aw",149).

laptop("MSI","Wind U100",139).

laptop("HP","HP 530",137).

laptop("ASUS"," M50Vm",125).

laptop("ASUS","Eee PC 701",106).

laptop("HP","Compaq 6730s",102).

laptop("Acer","EME510-1A1G12Mi",99).

laptop("HP","HP 550",99).

laptop("ASUS","M50Vn",95).

laptop("HP","Mini 2140",94).

laptop("Dell","Dell 500",93).

laptop("Acer","Aspire One A150-Bk",83).

laptop("ASUS","Eee PC 1000",79).

laptop("Acer","Aspire AS6935G",77).

laptop("Acer","Aspire One A110-Ab",76).

laptop("Lenovo/IBM","IdeaPad S10",74).

laptop("Fujitsu-Siemens"," Amilo MINI UI 3520",72).

laptop("Acer","Aspire AS6930G",70).

repeat.

repeat:-repeat.

main:-repeat,makewindow(1,7,7," BD laptops ",0,0,25,80),

clearwindow,menu,nl,

write("1 BD laptops; 2 BD HP; 3 BD Acer; 4 BD ASUS; 0 Exit"),

readint(CH),choice(CH),!.

menu:-laptop(A,B,C),write(A," ",B," ",C," "),nl,fail.

menu:-!.

choice(1):-clearwindow,

makewindow(2,7,7,"1 Vikno",5,0,5,80),

write(" BD HP: "),

findall(X,laptop("HP",_,X),Sp1),

write(Sp1),readchar(_),

makewindow(3,7,7,"2 Vikno",10,0,5,80),

write(" BD Acer: "),

findall(X,laptop(_,_,X),Sp2),

write(Sp2),readchar(_),

makewindow(4,7,7,"3 Vikno",15,0,5,80),

write(" BD ASUS: "),

findall(X,laptop("ASUS",_,X),Sp3),

write(Sp3),readchar(_),main.

choice(2):-clearwindow,shiftwindow(2),readchar(_),main.

choice(3):-clearwindow,shiftwindow(3),readchar(_),main.

choice(4):-clearwindow,shiftwindow(4),readchar(_),main.

choice(0):-!.

goal

main.

Результати роботи програми

Завдання №3

Тема: Рекурсія

Мета: Організація рекурсії

Задання: Написати довільну програму, використовуючи правило рекурсії

domains

i=integer

predicates

factorial(i,i)

clauses

factorial(1,1):-Result=1.

factorial(N,R):-N1=N-1,factorial(N1,R1),R=N*R1.

goal

clearwindow,factorial(5,Result),write("factorial = ",Result).

Результати роботи програми: factorial = 120

Завдання №4

Тема: Списки

Мета: Засвоїти операції зі списками

Завдання:

1. Створити базу даних мовою пролог яка вміщує не менш ніж 20 фактів

2. Вилучити елементи з бази данних до списку

3. Зробити зі списком наступні операції:

· Використання методу поділення списку на голову та хвіст

· Пошук заданого елемента у списку

· Поділення списку на 2 списки відносно заданого елементу

· Об`єднання 2 списків

· Сортування списку

domains

num=integer

source=integer*

str=integer*

predicates

main

menu

insert(num,source,source)

list(source)

find_it(num,source)

laptop(string,string,integer)

append(str,str,str)

compl(num,source,source,source)

sort(source,source)

sravn(num,num)

repeat

choice(num)

clauses

laptop("Acer","eMachines D620",280).

laptop("ASUS","Eee PC 900",253).

laptop("Acer","Aspire One A110-Aw",149).

laptop("MSI","Wind U100",139).

laptop("HP","HP 530",137).

laptop("ASUS"," M50Vm",125).

laptop("ASUS","Eee PC 701",106).

laptop("HP","Compaq 6730s",102).

laptop("Acer","EME510-1A1G12Mi",99).

laptop("HP","HP 550",99).

laptop("ASUS","M50Vn",95).

laptop("HP","Mini 2140",94).

laptop("Dell","Dell 500",93).

laptop("Acer","Aspire One A150-Bk",83).

laptop("ASUS","Eee PC 1000",79).

laptop("Acer","Aspire AS6935G",77).

laptop("Acer","Aspire One A110-Ab",76).

laptop("Lenovo/IBM","IdeaPad S10",74).

laptop("Fujitsu-Siemens"," Amilo MINI UI 3520",72).

laptop("Acer","Aspire AS6930G",70).

repeat.

repeat:-repeat.

main:-repeat,makewindow(1,7,7," BD laptops ",0,0,25,80),

clearwindow,menu,nl,

write("1 Vuly4 elem BD do spusky"),nl,

write("2 Podilennya spusky na H | T"),nl,

write("3 Find"),nl,

write("4 Podil na 2 spuska"),nl,

write("5 Zluttya 2x spuskiv"),nl,

write("6 Sort"),nl,

write("0 Exit"),nl,

write("Your choice: "),

readint(CH),choice(CH),!.

menu:-laptop(A,B,C),write(A," ",B," ",C," "),nl,fail.

menu:-!.

choice(1):-makewindow(2,7,7,"1 Zanesennya BD v spusok",0,0,25,80),

write("List: "),

findall(X,laptop(_,_,X),Sp),

write(Sp),readchar(_),main.

choice(2):-makewindow(3,7,7,"2 Podil spusky na H | T",0,0,25,80),

findall(X,laptop(_,_,X),Sp),nl,

write("List: ",Sp),nl,

list(Sp),readchar(_),main.

choice(3):-write("Vvedit elem powyky "),readint(P),

makewindow(4,7,7,"3 Find",0,0,25,80),

findall(X,laptop(_,_,X),Sp),find_it(P,Sp),main.

choice(4):-write("Vvedit elem vidnosno yakogo byde podil na 2 spuska: "),

readint(CH),makewindow(5,7,7,"4 Podil na 2 spuska",0,0,25,80),

findall(X,laptop(_,_,X),Sp),compl(CH,Sp,L1,L2),nl,

write("List 1: ",L1),nl,write("List 2: ",L2),readchar(_),main.

choice(5):-findall(X,laptop(_,_,X),Sp),

findall(X,laptop(_,_,X),Sp1),

makewindow(6,7,7,"5 Zluttya 2x spuskiv",0,0,25,80),

write("List: "),append(Sp,Sp1,S),write(S),

readchar(_),main.

choice(6):-findall(X,laptop(_,_,X),Sp),sort(Sp,M),

makewindow(7,7,7,"6 Sort",0,0,25,80),

write("Sorted list: "),nl,write(M),readchar(_),main.

choice(0):-!.

list([]).

list([H|T]):-nl,nl,write("Head: ",H),nl,write("Tail: ",T).

find_it(_,[]):-write("Not found "),readchar(_).

find_it(O,[P|_]):-O=P,write("Found ",O),readchar(_),!.

find_it(O,[_|Tail]):-find_it(O,Tail).

compl(_,[],[],[]).

compl(Mid,[H|Tail],[H|L1],L2):-H<=Mid,compl(Mid,Tail,L1,L2).

compl(Mid,[H|Tail],L1,[H|L2]):-H>Mid,compl(Mid,Tail,L1,L2).

append([],[],[]).

append([],[H|L2],[H|L3]):-append([],L2,L3).

append([H|T],L2,[H|L3]):-append(T,L2,L3).

sort([],[]).

sort([Head|Tail],Sort_l):-sort(Tail,Sort_tail),insert(Head,Sort_tail,Sort_l).

insert(Z,[K|Sort_l],[K|Sort_l1]):-sravn(Z,K),!,insert(Z,Sort_l,Sort_l1).

insert(Z,Sort_l,[Z|Sort_l]).

sravn(Z,K):-Z>K.

goal

main.

Результати роботи програми

Завдання №5

Тема: Рядки

Мета: Засвоїти операції з рядками

Завдання: Ввести рядки з клавіатури і зробити з ними наступні операції:

Конкатенація рядків

Створення підрядків

Використання функції frontToken

Перетворення рядків у список символів

Визначити довжину рядка

domains

s=string

i=integer

c=char

spi=c*

predicates

menu(i)

podil(s)

convert(s,spi)

find_it(c,spi,i,i)

split(i,spi,spi,spi,i)

append(spi,spi,spi)

poshyk(s,spi,s,spi)

clauses

menu(0):-makewindow(1,0,0,"",0,0,25,80),

makewindow(1,10,14,"ЊҐ­о",0,0,12,80),

nl,

write("1 - ЋЎу¤­ вЁ ап¤ЄЁ"),nl,

write("2 - `вў®аЁвЁ Їi¤ап¤ЄЁ"),nl,

write("3 - Џ®¤i«ЁвЁ а冷Є ­ «ҐЄбҐ¬г i § «Ёи®Є"),nl,

write("4 - ЏҐаҐвў®аЁвЁ а冷Є ў бЇЁб®Є бЁ¬ў®«iў"),nl,

write("5 - ‚Ё§­ зЁвЁ ¤®ў¦Ё­г ап¤Є "),nl,

write("0 - ‚л室"),cursor(8,15),

makewindow(2,14,10,"ђҐ§г«мв вЁ",12,0,13,80),

shiftwindow(1),readint(X),shiftwindow(2),menu(X).

menu(1):-write("‚ўҐ¤iвм 1-© а冷Є "),readln(S1),

write("‚ўҐ¤iвм 2-© а冷Є "),readln(S2),

concat(S1,S2,S3),

write("ђҐ§г«мвгозЁ© а冷Є: ",S3),

nl,fail.

menu(2):-write("‚ўҐ¤iвм а冷Є "),readln(S),

write("‚ўҐ¤iвм Єi«мЄiбвм бЁ¬ў®«iў ¤«п ўi¤¤i«Ґ­­п "),readint(K),

frontstr(K,S,S1,S2),nl,nl,

write("ђҐ§г«мвгозi ап¤ЄЁ: ",S1," : ",S2),

nl,fail.

menu(3):-write("‚ўҐ¤iвм а冷Є "),readln(S),

podil(S),

nl,fail.

menu(4):-write("‚ўҐ¤iвм а冷Є "),readln(S),

convert(S,M),

write("ђҐ§г«мвгозЁ© ¬ бЁў: ",M),nl,

nl,fail.

menu(5):-write("‚ўҐ¤iвм а冷Є "),readln(S),

str_len(S,I),

write("„®ў¦Ё­ ап¤Є - ",I," бЁ¬ў®«iў"),nl,

nl,fail.

menu(0):-exit.

menu(X):-X<6,nl,

write("„«п ўл室 ў ¬Ґ­о ­ ¦¬ЁвҐ «оЎго Є« ўЁиг"),

readchar(_),

removewindow,

shiftwindow(1),

removewindow,

menu(0).

menu(X):-X>6,menu(0).

podil(""):-!.

podil(S):-fronttoken(S,A,B),write(A," : ",B),nl,

podil(B).

convert("",[]).

convert(Str,[H|T]):-frontchar(Str,H,Str1),

convert(Str1,T).

poshyk(Str,Spis,Str1,Spis1):-

frontchar(Str,Pre,Str1),

find_it(Pre,Spis,1,Number),

split(Number,Spis,L1,L2,1),

append(L1,L2,Spis1).

find_it(H,[H|_],A,Number):-Number=A,!.

find_it(H,[_|T],A,Number):-A1=A+1,find_it(H,T,A1,Number).

split(_,[],[],[],_).

split(N,[H|T],[H|L1],L2,Np):-Np>N,Np1=Np+1,split(N,T,L1,L2,Np1).

split(N,[H|T],L1,[H|L2],Np):-Np<N,Np1=Np+1,split(N,T,L1,L2,Np1).

split(N,[H|T],L1,L2,Np):-Np=N,Np1=Np+1,split(N,T,L1,L2,Np1).

append([],L,L).

append([H|L1],L2,[H|L3]):-append(L1,L2,L3).

goal

menu(0),readint(_).

Результати роботи програми

Завдання №6

Тема: Структури. Використання структур

Мета: Засвоїти роботу зі складними типами даних

Завдання: Сформувати базу даних на 20 фактів. Задати програмі кілька питань, забезпечивши виведення інформації у різні вікна за допомогою організації циклу (repeat або рекурсії). Представити зрозумілий інтерфейс користувача.

9. Предметна галузь - список абонентів АТС, що містить такі дані: номер телефону, П.І.П., адреса (вулиця, номер будинку, номер квартири), пільги, борг з оплати.

domains

st=string

num=integer

source=integer*

str=integer*

predicates

main

menu

insert(num,source,source)

list(source)

find_it(num,source)

abon(st,st,st,num,num)

sort(source,source)

sravn(num,num)

repeat

choice(num)

clauses

abon("11-11-11","Petrov A.V.","Bylvarna 9 kv 1",10,0).

abon("11-11-12","Jashkov I.V.","Bylvarna 9 kv 2",6,10).

abon("11-11-13","Drabov A.P.","Bylvarna 9 kv 3",0,20).

abon("11-11-14","Ivanov Z.M.","Bylvarna 9 kv 4",2,0).

abon("11-11-15","Akronov V.V.","Bylvarna 9 kv 5",1,0).

abon("11-11-16","Sudorov K.A.","Bylvarna 9 kv 6",0,15).

abon("11-11-17","Bilko K.O.","Bylvarna 9 kv 7",12,0).

abon("11-11-18","Bratko Y.A.","Bylvarna 9 kv 8",0,10).

abon("11-11-19","Fritz T.A.","Bylvarna 9 kv 9",40,0).

abon("11-11-20","Naturenko O.B.","Bylvarna 9 kv 0",10,40).

abon("11-11-21","Fedorov F.V.","Bylvarna 9 kv 11",0,44).

abon("11-11-22","Axmedov A.I.","Bylvarna 9 kv 12",0,0).

abon("11-11-23","Dadonov M.T.","Bylvarna 9 kv 13",0,0).

abon("11-11-24","Vetrov P.F.","Bylvarna 9 kv 14",10,67).

abon("11-11-25","Zybko P.P.","Bylvarna 9 kv 15",0,0).

abon("11-11-26","Ribka A.V.","Bylvarna 9 kv 16",0,0).

abon("11-11-27","Oprinko O.D.","Bylvarna 9 kv 17",40,0).

abon("11-11-28","Zybko P.P.","Bylvarna 9 kv 15",50,24).

abon("11-11-29","Ribka A.V.","Bylvarna 9 kv 16",12,0).

abon("11-11-30","Oprinko O.D.","Bylvarna 9 kv 17",0,6).

repeat.

repeat:-repeat.

main:-repeat,makewindow(1,7,7," BD abonentov ",0,0,25,80),

clearwindow,menu,nl,

write("1 Stvorennya spusky borgiv"),nl,

write("2 Stvorennya spusky pilg"),nl,

write("3 Find"),nl,

write("4 Sort"),nl,

write("0 Exit"),nl,

write("Your choice: "),

readint(CH),choice(CH),!.

menu:-abon(A,B,C,D,E),write(A," ",B," ",C," ",D,"% ",E),nl,fail.

menu:-!.

choice(1):-makewindow(2,7,7,"1 Spusok borgiv",0,0,25,80),

write("Spusok borgiv: "),

findall(X,abon(_,_,_,_,X),Sp),

write(Sp),readchar(_),main.

choice(2):-makewindow(3,7,7,"Spusok pilg",0,0,25,80),

write("Spusok pilg: "),

findall(X,abon(_,_,_,X,_),Sp),

write(Sp),readchar(_),main.

choice(3):-write("Vvedit elem powyky, borgu "),readint(P),

makewindow(4,7,7,"3 Find",0,0,25,80),

findall(X,abon(_,_,_,_,X),Sp),find_it(P,Sp),main.

choice(4):-findall(X,abon(_,_,_,_,X),Sp),sort(Sp,M),

makewindow(7,7,7,"4 Sort",0,0,25,80),

write("Sorted list: "),nl,write(M),readchar(_),main.

choice(0):-!.

list([]).

list([H|T]):-nl,nl,write("Head: ",H),nl,write("Tail: ",T).

find_it(_,[]):-write("Not found "),readchar(_).

find_it(O,[P|_]):-O=P,write("Found borg ",O),readchar(_),!.

find_it(O,[_|Tail]):-find_it(O,Tail).

sort([],[]).

sort([Head|Tail],Sort_l):-sort(Tail,Sort_tail),insert(Head,Sort_tail,Sort_l).

insert(Z,[K|Sort_l],[K|Sort_l1]):-sravn(Z,K),!,insert(Z,Sort_l,Sort_l1).

insert(Z,Sort_l,[Z|Sort_l]).

sravn(Z,K):-Z>K.

goal

main.

список алгоритм цикл дані

Результати роботи програми

Завдання №7

Назва роботи

Робота в середовищі Лісп. Елементарні операції. Базові функції

Мета роботи: Ознайомлення з діалектами Лісп. Вивчення діалогу з інтерпретатором ЛІСП. Виконання елементарних операцій і арифметичних дій. Вивчення використання базових функцій і базових предикатів.

Завдання (2 в.)

1. Обчислити на комп'ютері та пояснити результат

(*(+ 1 2) (+ 3 4))

Результат

21 ; (1+2)*(3+4) = 21

За допомогою CAR і CDR виділити із списків символ “число”. Спростити виклики за допомогою вкладених CAR/CDR. ((1) (2 число) (3 (4)))

Результат: число ; CDDAR - CDR CDR CAR

Обчислити: (CONS NIL NIL)

Результат: (NIL) ; Створення пустого списку

Обчислити: (eval `(car `(a b c)))

Результат: а ; (car (a b c)) Вибір голови списку

Значення атома А після вилику _(set (setq b `a) (setq a `c))

Результат: c ; set (a c) В значення А занести С

Обчислити: (equal `(a b) (cons `(a) `(b)))

Результат: NIL ; Порівняння (A B) і ((A) B)

Висновки

Виконав всі поставленні завдання згідно свого варіанту. Навчився використовувати бектрекінг, метод повтору, рекурсію, створення вікон, списки та працювати з рядками в Turbo Prolog. Створив програми з зручним користувацьким інтерфейсом, котрі реалізують поставлені завдання та виводять результати роботи в окремі вікна. Освоїв роботу в середовищі ЛІСП. Навчився використовувати елементарні операції, базові функції і арифметичні дії.

Размещено на Allbest.ru


Подобные документы

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.

    лекция [445,0 K], добавлен 24.07.2014

  • Середовище програмування Visual Studio 2010. Функції стандартного введення-виведення. Робота з побітовими операціями. Робота з функцією заміни у рядку символів. Робота з масивами. Тестування алгоритму роботи програми. Представлення двовимірного масиву.

    курсовая работа [652,2 K], добавлен 15.01.2014

  • Відомості про мови програмування та методи програмування. Системні вимоги програми. Керівництво програміста та керівництво користувача. Використання консольного додатку візуального середовища Visual Studio 2010. Запуск програми "Толковый словарь".

    курсовая работа [791,1 K], добавлен 18.01.2015

  • Створення інформаційної системи для спортивного магазину харчування. Обґрунтування вибору мови програмування. Текстуальний опис алгоритму. Проектування бази даних. Комп'ютеризація торгівельних закладів, отримання необхідних даних в автоматичному режимі.

    дипломная работа [1,3 M], добавлен 12.05.2015

  • Розробка бази даних для меблевої фірми. Обстеження і аналіз предметної області та побудова концептуальної, логічної та фізичної моделі цієї бази даних. Використання мови програмування Visual Basic при написанні програмного коду, що обслуговує базу даних.

    курсовая работа [1,4 M], добавлен 24.10.2010

  • Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.

    реферат [29,9 K], добавлен 28.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.