
Интеллектуальные информационные системы 4 курс Попов / Кольцова АА ЛР2_1
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Сочинский государственный университет»
Кафедра Информационных технологий
ОТЧЁТ
по лабораторной работе № 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.