Лабы Пролог. Лабораторная работа Поиск с возвратом 2 Постановка задачи 2 Выполнение работы 2 Результаты 4
Скачать 231 Kb.
|
Содержание: Лабораторная работа № 2. Поиск с возвратом 2 1. Постановка задачи 2 2. Выполнение работы 2 3. Результаты 4 Лабораторная работа № 3. Рекурсия 5 1. Постановка задачи 5 2. Выполнение работы 5 3. Результаты 5 Лабораторная работа № 4. Обработка списков 7 1. Постановка задачи 7 2. Выполнение работы 7 3. Результаты 7 Лабораторная работа № 5. Рекурсивные структуры данных (деревья) 8 1. Постановка задачи 8 2. Выполнение работы 8 3. Результаты 9 Лабораторная работа № 6. Базы данных 11 1. Постановка задачи 11 2. Выполнение работы 11 3. Результаты 12 Лабораторная работа № 7. Строки и файлы 13 1. Постановка задачи 13 2. Выполнение работы 13 Лабораторная работа № 2. Поиск с возвратом1. Постановка задачиНаписать программу, реализующую определенную структуру данных. Каждый факт должен содержать не менее трех элементов в кортеже, количество записей – фактов не менее 15. Реализовать вывод всей информации из структуры, поиск по одному и по двум атрибутам записи.
2. Выполнение работыДанные:
DOMAINS territory=ter(real, integer). population=pop(real, integer). info=c(string, territory, population, string). PREDICATES country(info). show. search(string). search(integer, integer). CLAUSES country(c("Australia", ter(7686.8, 6), pop(21585.1, 52), "Kanberra")). country(c("France", ter(674.8, 47), pop(64473.1, 20), "Paris")). country(c("India", ter(3287.6, 7), pop(1131191, 2), "New Delhi")). country(c("Hungary", ter(93.0, 109), pop(9930.9, 79), "Budapest")). country(c("Canadian", ter(9984.7, 2), pop(33091.2, 37), "Ottawa")). country(c("China", ter(9570, 3), pop(1322178.2, 1), "Pekin")). country(c("Russia", ter(17075.4, 1), pop(141887.5, 9), "Moskow")). country(c("USA", ter(9518.9, 4), pop(304000.0, 3), "Washington")). country(c("BreatBritain", ter(244.8, 76), pop(60776.2, 21), "London")). country(c("Greece", ter(131.9, 94), pop(10964.0, 70), "Athenes")). country(c("Kazakhstan", ter(2724.9, 9), pop(15658.3, 61), "Astana")). country(c("Madagascar", ter(587.0, 45), pop(19448.8, 55), "Antananarivo")). country(c("Maldives", ter(0.3, 186), pop(298.9, 166), "Male")). country(c("Estonia", ter(45.0, 129), pop(1342.4, 151), "Tallinn")). country(c("Japan", ter(377.8, 60), pop(127433.5, 10), "Tokyo")). country(c("Czechia", ter(78.9, 114), pop(10403.1, 79), "Prague")). show:-write("***********************************************************\n"), write("* COUNTRY\t* TERRITORY \t* POPULATION \t* CAPITAL *"), nl, write("* \t* km place \t* people place\t* \t*\n"), write("***********************************************************\n"), nl, country(c(X, ter(At, Bt), pop(Ap, Bp), Y)), writef("%s\t\t%-1\t%u\t%-1\t%u\t%s\n", X, At, Bt, Ap, Bp, Y), fail. search(X):- country(c(Y, ter(_, _), pop(_, _), X)), writef("The %s is the capital of the %s.\n", X, Y), fail; country(c(X, ter(At, Bt), pop(Ap, Bp), Y)), writef("The capital of %s is %s.\nThe territory is %-1, zanimaet %u mesto v mire.\nThe population is %-1, zanimaet %u mesto v mire.\n", X, Y, At, Bt, Ap, Bp), fail. search(T, P):- country(c(X, ter(_, Bt), pop(_, Bp), _)), Bt<=T, Bp<=P, writef(" %s, ", X), fail. 3. РезультатыВывод информации на экран Вывод информации организуется с помощью команды show. Поиск по одному атрибуту Поиск можно осуществить по названию страны и по городу. Например, найдем информацию о стране Китай (China) и о городе Москва (Moskow): Поиск по двум атрибутам Найдем все страны, которые занимают выше 10-го места по территории и населению и страны, которые занимают выше 100-го места по территории и выше 50-го по населению: Лабораторная работа № 3. Рекурсия1. Постановка задачиНаписать рекурсивную программу вычисления суммы ряда чисел cos(n). Результат выведите в виде таблицы. Применить нехвостовую и хвостовую рекурсии. 2. Выполнение работыНе хвостовая рекурсия: PREDICATES sum(integer, real). CLAUSES sum(0, 1):-!. sum(N, R):- Next_N=N-1, sum(Next_N, P), R=cos(N)+P, writef(" % \t %-4", N, R), nl. GOAL write(" *** Lab 3. Recurse ***"), nl, nl, write("Enter quantity of elements of a number: "), readint(X), nl, write("Number SumCos"), nl, sum(X, Res). Хвостовая рекурсия: PREDICATES sum(integer, real, real). CLAUSES sum(0, _, _):-!. sum(N, R, P):- Next_N=N-1, R=cos(N)+P, sum(Next_N, R, R), writef(" % \t %-4", N, R), nl. GOAL write(" *** Lab 3. Recurse ***"), nl, nl, write("Enter quantity of elements of a number: "), readint(X), nl, write("Number SumCos"), nl, sum(X, Res, 0). 3. РезультатыЛабораторная работа № 4. Обработка списков1. Постановка задачиНаписать программу для вывода n-го элемента списка. 2. Выполнение работыDOMAINS list=integer*. PREDICATES nth_element(integer, list, integer) CLAUSES nth_element(1, [A|_], A):- !. nth_element(N, [_|L], A):- N1=N-1, nth_element(N1, L, A). GOAL write(" *** Lab 4. List ***"), nl, nl, write("Enter number of element of the list: "), readint(N), nth_element(N, [0, 1, 2, 3, 4], A), writef("Element # % = %", N, A), nl. 3. РезультатыЛабораторная работа № 5. Рекурсивные структуры данных (деревья)1. Постановка задачиПроверить, является ли дерево упорядоченным, уточнить: по возрастанию или по убыванию. 2. Выполнение работыDOMAINS tree=t(integer, tree, tree); empty() PREDICATES print_tree(tree). order(tree) order_left(integer, tree) order_right(integer, tree) CLAUSES print_tree(empty):- !. print_tree(t(R, Left, Right)):- write(R, '\t'), print_tree(Left), print_tree(Right). order(empty):- !. order(t(_, empty, empty)):- !. order(t(R, Left, Right)):- order_left(R, Left), order_right(R, Right), order(Left), order(Right), write("Tree order by vozrast\n"); order_left(R, Right), order_right(R, Left), order(Left), order(Right), write("Tree order by ubivan\n"). order_left(_, empty). order_left(T, t(L, _, _)):- T>=L. order_right(_,empty). order_right(T, t(R, _, _)):- T<=R. GOAL write(" *** Lab 5. Tree ***"), nl, nl, Tree1=t(6, t(3, t(2, empty, empty), t(4, empty, empty)), t(7, t(3, empty, empty), t(8, empty, empty))), Tree2=t(6, t(7, t(8, empty, empty), t(5, empty, empty)), t(3, t(4, empty, empty), t(2, empty, empty))), Tree3=t(5, t(2, t(8, empty, empty), t(1, empty, empty)), t(4, t(3, empty, empty), t(2, empty, empty))), write("Tree: "), print_tree(Tree3), nl, order(Tree3), write("Tree order!\n"), !; write("Tree not order\n"). 3. РезультатыРассмотрим работу программы на примере трех деревьев. Дерево, упорядоченное Дерево, упорядоченное по возрастанию: по убыванию: Неупорядоченное дерево: Результат для дерева № 1: Результат для дерева № 2: Результат для дерева № 3: Лабораторная работа № 6. Базы данных1. Постановка задачиСоздать базу данных из начальной базы с учетом приведенных условий. Начальная база содержит факты произвольного вида. Удалить все дублирующиеся факты с выводом соответствующих сообщений. Выполнить реализацию внешней базы данных, при этом результат поместить во внешний файл. При реализации внутренней базы данных результат выводится в окно выполнения Пролога. 2. Выполнение работыDOMAINS list=string*. DATABASE country(string). PREDICATES import. export. nondeterm del(string). add(list). CLAUSES import:- consult("Lab6In.txt"), write(" Database import from file!"), nl. export:- save("Lab6Out.txt"), write(" Database export in file!"), nl. del(H):- retract(country(H)). add([H|T]):- country(H), !, write("Double fact is delete: ", H), nl, add(T). add([H|T]):- assertz(country(H)), !, add(T). add([]). GOAL import, findall(H, del(H), T), add(T), export. 3. РезультатыФайл Lab6_Imp.txt: country("Russia") country("USA") country("France") country("Breat Britan") country("Germany") country("USA") country("France") country("France") country("Germany") Запустим программу: Файл Lab6_Exp.txt: country("Russia") country("USA") country("France") country("Breat Britan") country("Germany") Лабораторная работа № 7. Строки и файлы1. Постановка задачиНаписать программу, которая бы искала введенное слово в тексте (текст в файле) по максимальному количеству совпадающих первых букв. Результат сохранить в новом файле. 2. Выполнение работыDOMAINS Str=string. Ch=char. Word=string. file=f1; f2. PREDICATES find(Word). search(string, string, integer). CLAUSES find(Word):- openread(f1, "lab7in.txt"), openwrite(f2, "lab7out.txt"), writedevice(f2), file_str("lab7in.txt", Str), str_len(Word, Len), search(Str, Word, Len), closefile(f1), closefile(f2). search(Str, Word, Len):- searchstring(Str, Word, Pos), writef("The word [%s] find on % position", Word, Pos); Len2=Len-1, substring(Word, 0, Len2, Word2), search(Str, Word2, Len2). GOAL write(" *** Lab 7. String & File ***"), nl, nl, write("Enter the word: "), readln(Word), find(Word). |