Помощь в написании студенческих работ
Антистрессовый сервис

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

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

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

Логічне та функціональне програмування (реферат, курсовая, диплом, контрольная)

Міністерство освіти і науки України Черкаський державний технологічний університет Кафедра програмного забезпечення Контрольна робота

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

Черкаси 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

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. Створив програми з зручним користувацьким інтерфейсом, котрі реалізують поставлені завдання та виводять результати роботи в окремі вікна. Освоїв роботу в середовищі ЛІСП. Навчився використовувати елементарні операції, базові функції і арифметичні дії.

Показать весь текст
Заполнить форму текущей работой