Скачиваний:
10
Добавлен:
01.06.2021
Размер:
136.79 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ

ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

старший преподаватель

Е.П. Виноградова

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5

Представление сложных структур данных

по курсу: Информатизация и анализ информационных ресурсов общества

РАБОТУ ВЫПОЛНИЛА

СТУДЕНТКА ГР.

4716

С.А. Янышева

подпись, дата

инициалы, фамилия

Санкт-Петербург

2021

  1. Цель работы

Изучить способы представления в языке Prolog сложных структур данных, представляющих составные объекты.

  1. Вариант 2

Сформировать с использованием структур статическую БД об авторах. Для каждого автора хранить следующую информацию: Фамилия, Имя, Отчество, год рождения, список произведений. Каждое произведение задается структурой: название, год, вид, жанр. Сформировать следующие запросы к базе данных:

Названия всех произведений заданного автора;

Все жанры, в которых проявил себя указанный автор;

Все авторы, отметившиеся в указанном жанре;

Какие виды произведений встречаются среди произведений указанного жанра.

  1. Ход выполнения работы

Рисунок 1 – Добавление нового автора

Рисунок 2 – Добавление информации о новом произведении

Рисунок 3 – Запрос 1

Рисунок 4 – Запрос 2

Рисунок 5 – Запрос 3

Рисунок 6 – Запрос 4

Рисунок 7 – Получившаяся база данных

  1. Выводы

В ходе лабораторной работы были изучены способы представления в языке Prolog сложных структур данных, представляющих составные объекты.

Листинг программы:

run:- retractall(writer/3), add_writer.

add_writer:-

write('Введите данные писателя:'),

nl,

repeat,

write('Имя_Фамилия:'),

read(FullName),

write('Год рождения:'),

read(BirthYear),

write('Список работ ["1-е произведение","2-е произведение",...]'),

read(WorksList),

assertz(writer(FullName, BirthYear, WorksList)),

quest1,

!.

quest1:-

write('Добавить ещё одного автора? (y/n)'),

read(ANS),

answer1(ANS).

answer1(_):-fail.

answer1(y):-fail.

answer1(n):- retractall(works/4), add_works_info.

add_works_info:-

write('Введите данные произведения:'),

nl,

repeat,

write('Название:'),

read(WorkName),

write('Год написания:'),

read(ReleaseYear),

write('Тип:'),

read(Type),

write('Жанр:'),

read(Style),

assertz(works(WorkName, ReleaseYear, Type, Style)),

quest2,

!.

quest2:-

write('Добавить инф. о ещё одном произведении? (y/n)'),

read(ANS),

answer2(ANS).

answer2(_):-fail.

answer2(y):-fail.

answer2(n):-db_save.

save_db:-

tell('db.txt'),

listing(writer),

listing(works),

told,

write('Информация сохранена.').

load_db:- consult('db.txt'), write('Информация загружена.').

run_query1:-

write('Введите Имя_Фамилию автора:'),

read(X),

nl,

writer(X,_,WL),

write('Названия всех произведений автора:'),

write(WL).

run_query2:-

write('Введите Имя_Фамилию автора:'),

read(X),

writer(X,_,WL),

qwe(WL,LST),

unique(LST,ANS),

nl,

write('Все жанры, в которых проявил себя заданный автор:'),

write(ANS).

run_query3:-

write('Введите название жанра:'),

read(X),

findall(Name,writer(Name,_,_),NL),

zxc(NL,X,LST),

write('Все авторы отметившиеся в указанном жанре:'),

write(LST).

run_query4:-

write('Введите название жанра:'),

read(X),

findall(Name,writer(Name,_,_),NL),

asd(NL,X,LST),

unique(LST,ANS),

write('Какие виды произведений встречаются среди произведений указанного жанра:'),

write(ANS).

unique([H|T],[H|TU]) :- delete(T,H,TN), unique(TN,TU).

unique([],[]).

qwe([],_).

qwe([W|WL],L):- works(W,_,_,S), qwe(WL,L1), append(L1,[S],L).

qwe1([],_,_).

qwe1([W|WL],X,L):- findall(Type, works(W,_,Type,X), S), qwe1(WL,X,L1), append(L1,S,L).

style_check([],_,_).

style_check([W|WL],X, L):- works(W,_,_,S), style_check(WL,X,L), X\=S, L = false; L = true, !.

zxc([],_,_).

zxc([A|NL],X,L):- writer(A,_,WL), zxc(NL,X,L1),style_check(WL,X,C),C==true,append(L1,[A],L).

asd([],_,_).

asd([A|NL],X,LST):- writer(A,_,WL), asd(NL,X,L1), qwe1(WL,X,L), append(L1,L,LST).

Соседние файлы в предмете Информатизация и анализ информационных ресурсов общества