Главная страница
Навигация по странице:

  • Страна Площадь, Население, Столица

  • Вывод информации на экран

  • Поиск по двум атрибутам

  • Лабы Пролог. Лабораторная работа Поиск с возвратом 2 Постановка задачи 2 Выполнение работы 2 Результаты 4


    Скачать 231 Kb.
    НазваниеЛабораторная работа Поиск с возвратом 2 Постановка задачи 2 Выполнение работы 2 Результаты 4
    Дата25.09.2022
    Размер231 Kb.
    Формат файлаdoc
    Имя файлаЛабы Пролог.doc
    ТипЛабораторная работа
    #696201


    Содержание:


    Лабораторная работа № 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

    Географический справочник



    2. Выполнение работы



    Данные:

    Страна

    Площадь,

    Население,

    Столица

    тыс. км2

    место

    тыс. чел.

    место

    Австралия

    7 686,8

    6

    21 585,1

    52

    Канберра

    Франция

    674,8

    47

    64 473,1

    20

    Париж

    Индия

    3 287,6

    7

    1 131 191,1

    2

    Нью-Дели

    Венгрия

    93,0

    109

    9 930,9

    79

    Будапешт

    Канада

    9 984,7

    2

    33 091,2

    37

    Оттава

    Китай

    9 570

    3

    1 322 178,2

    1

    Пекин

    Россия

    17 075,4

    1

    141 887,5

    9

    Москва

    США

    9 518,9

    4

    304 000,0

    3

    Вашингтон

    Великобритания

    244,8

    76

    60 776,2

    21

    Лондон

    Греция

    131,9

    94

    10 964,0

    70

    Афины

    Казахстан

    2 724,9

    9

    15 658,3

    61

    Астана

    Мадагаскар

    587,0

    45

    19 448,8

    55

    Антананариву

    Мальдивы

    0,3

    186

    298,9

    166

    Мале

    Эстония

    45,0

    129

    1 342,4

    151

    Таллин

    Япония

    377,8

    60

    127 433,5

    10

    Токио

    Чехия

    78,9

    114

    10 403,1

    79

    Прага



    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).






    написать администратору сайта