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

  • ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №1 ПО ДИСЦИПЛИНЕ «ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»

  • Цель работы

  • Часть 1. Задание

  • Описание родственных связей

  • Исходные коды

  • Часть 2. Задание: В соответствии с вариантом написать программу с использованием поиска с возвратом.Вариант 8

  • Функциональное и логическое программирование. ЛР1 Кононова Евдокимова АВТ-910. Отчет по лабораторной работе 1 по дисциплине функциональное и логическое программирование


    Скачать 124.39 Kb.
    НазваниеОтчет по лабораторной работе 1 по дисциплине функциональное и логическое программирование
    АнкорФункциональное и логическое программирование
    Дата20.01.2023
    Размер124.39 Kb.
    Формат файлаdocx
    Имя файлаЛР1 Кононова Евдокимова АВТ-910.docx
    ТипОтчет
    #896171

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
    ВЫСШЕГО ОБРАЗОВАНИЯ

    «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

    Кафедра вычислительной техники

    ОТЧЕТ

    ПО ЛАБОРАТОРНОЙ РАБОТЕ №1

    ПО ДИСЦИПЛИНЕ

    «ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»

    Факультет: АВТФ Преподаватель: Новицкая Ю.В.

    Группа: АВТ-910

    Студенты: Евдокимова С.С., Кононова Ю.А.

    Новосибирск, 2022 г.

    Цель работы:

    Приобретение практических навыков написания, отладки программ и составления запросов на языке логического программирования Prolog. Изучение принципов работы механизма поиска с возвратом.

    Часть 1. Задание:

    Используя предикаты parent/2, man/1, woman/1 (дополнительно married/2), записать факты, описывающие семью.

    Записать три правила вывода для родственных отношений в семье из перечня I (минимум баллов) и три правила вывода для любых родственных отношений из перечня II.

    Перечень I:

    сестра или брат, бабушка или дедушка, внучка или внук, двоюродная сестра или двоюродный брат.

    Перечень II:

    тетя или дядя, племянница или племянник, сватья или сват, теща или тесть, свекровь или свекор, невестка или зять, свояченица или свояк, золовка или сноха, шурин или деверь или любые другие.
    Описание родственных связей:



    Рисунок 1 – Родственные связи

    Исходные коды:

    man("Николай").

    man("Александр").

    man("Валерий").

    man("Антон").

    woman("Наталья").

    woman("Валентина").

    woman("Марина").

    woman("Елена").

    woman("Ольга").

    married("Наталья","Александр").

    check_married(X,Y):- married(X,Y); married(Y,X).

    parent("Николай","Марина").

    parent("Николай","Наталья").

    parent("Наталья","Ольга").

    parent("Александр","Ольга").

    parent("Валентина","Александр").

    parent("Валентина","Валерий").

    parent("Валентина","Елена").

    parent("Елена","Антон").

    %брат/сестра

    brother(X,Y):- man(X), parent(Z,Y), parent(Z,X), X\=Y.

    sister(X,Y):- woman(X), parent(Z,X), parent(Z,Y), X\=Y.

    %бабушка/дедушка

    grandma(X,Y):- woman(X), parent(X,Z), parent(Z,Y).

    grandpa(X,Y):- man(X), parent(X,Z), parent(Z,Y).

    %внучка/внук

    granddoughter(X,Y):-woman(X), (grandma(Y,X); grandpa(Y,X)).

    grandson(X,Y):-man(X), (grandma(Y,X); grandpa(Y,X)).

    %двоюродные сестра/брат

    cousin_sister(X,Y):-

    woman(X), parent(P,X), (sister(P,A); brother(P,A)), parent(A,Y).

    cousin_brother(X,Y):-

    man(X), parent(P,X), (sister(P,A); brother(P,A)), parent(A,Y).

    %тётя/дядя

    aunt(X,Y):-woman(X), (sister(X,Z); check_married(X,U), brother(U,Z)), parent(Z,Y).

    uncle(X,Y):-man(X), (brother(X,Z); check_married(X,U), sister(U,Z)), parent(Z,Y).

    %племянница/племянник

    niece(X,Y):-woman(X), (aunt(Y,X); uncle(Y,X)).

    nephew(X,Y):-man(X), (aunt(Y,X); uncle(Y,X)).

    %сватья/сват

    matchmaking(X,Y):-woman(X), parent(X,S), check_married(S,D), parent(Y,D).

    matchmaker(X,Y):-man(X), parent(X,S), check_married(S,D), parent(Y,D).

    %тесть

    father_in_law_from_wife(X,Y):-

    man(X), parent(X,D), woman(D), check_married(D,Y).

    %свектовь

    mother_in_law_from_husband(X,Y):-

    woman(X), parent(X,D), man(D), check_married(D,Y).

    %невестка/зять

    nevestka(X,Y):- woman(X), check_married(X,B), (brother(B,Y); parent(Y,B)).

    zyat(X,Y):- man(X), check_married(X,B), (sister(B,Y); parent(Y,B)).

    Скриншоты:



    Рисунок 2 – Вывод результатов
    Часть 2. Задание:

    В соответствии с вариантом написать программу с использованием поиска с возвратом.

    Вариант 8:

    Написать программу для продажи туристических туров. Должна быть представлена следующая информация: название тура, страна, продолжительность, цена. Реализовать вывод информации обо всех турах, поиск тура по стране. Реализовать поиск по продолжительности с указанием интервала возможной продолжительности (должна быть выведена информация о турах, продолжительность которых попадает в указанный интервал) (минимум баллов).
    Для удобства работы реализовать меню с соответствующими пунктами, предусмотреть пункт для завершения работы и обработку неверного ввода пункта меню.

    Исходные коды:

    tour(tour,finland,7,39000).

    tour(tour2,korea,10,60000).

    tour(tour3,switzerland,8,30000).

    tour(tour4,thailand,14,56000).

    tour(tour5,czech,7,28000).

    tour(tour6,australia,16,78000).

    start:-

    nl, write("1) Все туры"),nl,

    write("2) Поиск тура по стране"),nl,

    write("3) Поиск тура по продолжительности"),nl,

    write("0) Завершить"),read(W),do(W).

    do(0):- write("Выход").

    do(1):-

    tour(X,Y,Z,W), write(X),

    write(" "), write(Y),

    write(" Продолжительность: "),write(Z),

    write(" Цена: "),write(W),nl,fail.

    do(1):- start.

    do(2):-

    write("Введите название страны"),read(C),tour(X,C,Z,W),

    write(X),write(" "),

    write(C),write(" Продолжительность: "),

    write(Z),write(" Цена: "),

    write(W),nl,start.

    do(3):-

    write("Введите минимальную продолжительность тура"),read(DMIN),nl,

    write("Введите максимальную продолжительность тура"),read(DMAX),nl,

    tour(X,Y,Z,W), Z>=DMIN, Z=
    write(X),write(" "),

    write(Y),write(" Продолжительность: "),

    write(Z),write(" Цена: "),

    write(W),nl,fail.

    do(3):- start.

    do(_):-write("Неверный ввод пункта меню"), nl, start.

    Скриншоты:



    Рисунок 3 – Вывод результатов

    Выводы:

    В ходе выполнения лабораторной работы мы приобрели практические навыки написания, отладки программ и составления запросов на языке логического программирования Prolog. Изучили принципы работы механизма поиска с возвратом. Мы изучили принципы работы механизма поиска с возвратом, приобрели практические навыки написания программ с использованием рекурсии (нехвостовой и хвостовой) на языке логического программирования Prolog


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