Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
17.12.2023
Размер:
608.34 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего образования

«Сочинский государственный университет»

Кафедра Информационных технологий

ОТЧЁТ

по лабораторной работе № 2

«РАЗРАБОТКА ЭКСПЕРТНОЙ СИСТЕМЫ»

Выполнила: студентка группы 20-ПИ

Кольцова Адриана Андреевна

Дата: 29.09.2023

Проверил: д.т.н. проф. Попов Д.И.

Дата: _______________

Сочи 2023

Задание 1

Написать программу — «Hello, world!».

2. Написать в Turbo Prolog программу с произвольными предикатами, которая будет включать составные объекты и альтернативные домены.

3. Описать отношения для следующих комбинаций «субъекты ― предметы»: субъекты ― марки автомобилей.

4. Реализовать пример родственных отношений (не менее 7предикатов, не менее 15 правил, и 2–3 цели (например, «у когомама — Ольга?»).

5. Определить родственное отношение «grandmother» («бабушка»).

Задание 2

Написать простую программу-калькулятор, которая выполняет четыре арифметических действия над целыми числами, вводимыми пользователем.

domains

X,Y,A,S,M,D = integer

predicates

input(X,X).

add(X,X,X).

sub(X,X,X).

multi(X,X,X).

division(X,X,X).

clauses

input(X,Y) :-write("Input first number: "),

readint(X),

write("Input second number: "),

readint(Y).

add(X,Y,A) :-input(X,Y),

A=X+Y,

write(X,"+",Y,"=",A), nl.

sub(X,Y,S) :-

S=X-Y,

write(X,"-",Y,"=",S), nl.

multi(X,Y,M) :-

M=X*Y,

write(X,"*",Y,"=",M), nl.

division(X,Y,D) :-

Y<>0,

D=X/Y,

write(X,"/",Y,"=",D).

goal

add(X,Y,A),

sub(X,Y,S),

multi(X,Y,M),

division(X,Y,D).

2. Реализовать вычисление куба числа, вводимого пользователем.

3. Написать в Turbo Prolog программу, которая будет искать значение Z по введенным с клавиатуры значениям X и Y, при этом в зависимости от значения X должно происходить разветвление программы. Например, при X < 0, Z = X + Y, а при X >= 0, Z = X*Y. 23

4. Написать программу, задающую отношение triangle(N, T), истинное, если T ― треугольное число с индексом N.

Задание 3

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

Программа с методом отката:

Программа с методом отсечения и отката:

Программа с рекурсией:

Реализовать в Turbo Prolog ориентированный граф.

3. Описать граф. Задать отношения, позволяющие определить наличие в графе путей между произвольной парой вершин.

4. Описать граф. Задать отношения, позволяющие определить наличие в графе многоугольников с заданным числом сторон (например, четырехугольников)

domains

point=symbol

predicates

arc_(point,point)

line_(point,point)

qu(point,point,point,point)

clauses

arc_(a,b).

arc_(a,c).

arc_(a,d).

arc_(a,e).

arc_(a,f).

arc_(b,c).

arc_(b,d).

arc_(b,e).

arc_(b,f).

arc_(c,d).

arc_(c,b).

arc_(c,e).

arc_(c,f).

arc_(d,e).

arc_(d,b).

arc_(d,c).

arc_(d,a).

arc_(f,a).

arc_(f,b).

arc_(f,c).

arc_(f,d).

arc_(f,e).

line_(A,B):-arc_(B,A).

qu(X,Y,Z,W):-line_(X,Y),

line_(Y,Z),line_(Z,W),line_(W,X).

Задание 4

Написать в Turbo Prolog программу, аналогичную приведенной в листинге 4.5 (поиск элемента в списке), но для других предикатов.\

2. Написать программу, которая будет находить сумму элементов в списке из целых чисел.

3. Написать программу считывания целых чисел с терминала и занесение их в список.

4. Написать программу преобразования строки в список символов.

5. Написать программу преобразование строки в список атомов.

Задание 5

1 Реализовать запись символов в файл «myfile.txt», который создается на текущем диске.

Реализовать чтение символа из файла и вывод его на экран дисплея.

Задание 6

Реализовать создание и сохранение базы данных.

Реализовать простейший итерационный процесс.

Реализовать считывание базы данных из файла.

Реализовать базу данных о читателях.

Создать базу данных о студентах вашей группы: фамилия, имя, год рождения. Получить список студентов старше 20 лет.

database

group(symbol, symbol, integer)

predicates

student(symbol, symbol, integer)

download_base

rule

menu(integer)

search

clauses

student("Ivanov", "Ivan", 2002).

student("Yuriev", "Yuriy", 2003).

student("Vasilev", "Vasiliy", 2001).

student("Maximov", "Maxim", 2005).

student("Danilov", "Daniil", 2000).

student("Alexsandrov", "Alexsander", 2002).

student("Alexsandrova", "Alexsandra", 2005).

student("Vasilisova", "Vasilisa", 2002).

student("Polinina", "Polina", 2005).

student("Elenova", "Elena", 2000).

rule:- write("1. Add data to DB"), nl,

write("2. Remove data"), nl,

write("3. Show everybody >20 age"), nl,

write("4. Show DB"), nl,

write("5. Exit"), nl,

readint(N),

N<5,

menu(N).

menu (1):- write ("Input surname, name and year of birth."),nl,

write("Surname: "),readln(Surname),

write("Name: "),readln(Name),

write("Year of birth: "),readint(Year),

assertz(group(Surname,Name,Year)).

menu(2):- write("Input surname of student for deleting data:"),nl,

readln (Surname),

retract(group(Surname,_,_)).

menu(2):- write("There is no student with such name!"),nl.

menu(3):- search.

menu(4):- group(F,T,N),

write("Name: ",F," ",T), write(", year: ", N), nl,fail.

search:- student(X,Y,Z), Z<2003,

write("Age >20: ", X," ", Y), nl,fail.

download_base:- student (X, Y, Z),

assertz(group(X,Y,Z)),fail.

download_base:- write("Dynamic base created. Press ENTER"),nl,readln(_).

goal

download_base, rule.

Задание 7

Написать в Turbo Prolog аналогичную программу для произвольной экспертной системы

database

dpos(symbol)

dneg(symbol)

predicates

do_expert

do_consult

anime_is(symbol)

clear_facts

prop (symbol)

clauses

do_expert:- write("Otvechaite na voprosy, vibiraya harakteristiki anime (y/n)."),nl, do_consult.

do_consult:- anime_is(X),!,write("Vi dolgni posmotret' ",X,"!"),nl, readln(_),clear_facts.

do_consult:- write("Izviniti my ne mogem vam pomoch'."),nl, readln(_),clear_facts.

prop(X):- dpos(X),!.

prop(X):- not(dneg(X)),

write ("Ystraivaet li vas haracteristika: ",X,"?"),nl, readln(A), A="y",

asserta(dpos(X)).

prop(X):- asserta(dneg(X)), fail.

clear_facts:- retract (dpos (_)), fail.

clear_facts:- retract (dneg (_)), fail.

anime_is("Klinok rassekayshii demonov"):-

prop("korotkoe anime"),

prop("sverhestestvennoe"),

prop("vipyskaetsya"),

prop("sovremennaya risovka").

anime_is("Doctor Stoun"):-

prop("korotkoe anime"),

prop("fantastika"),

prop("vipyskaetsya"),

prop("sovremennaya risovka").

anime_is("Vselenas"):-

prop("korotkoe anime"),

prop("komediya"),

prop("zaversheno"),

prop("staraya risovka").

anime_is("White clover"):-

prop("dlinnoe anime"),

prop("boevik"),

prop("vipyskaetsya"),

prop("sovremennaya risovka").

anime_is("Tetrad"):-

prop("dlinnoe anime"),

prop("fantasy"),

prop("zaversheno"),

prop("staraya risovka").

goal do_expert.