МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра Экономической информатики
Лабораторная работа №3 по интеллектуальным информационным системам
Выполнили:
Студенты группы ФБИ-62
Старостина Е.А., Сахарова Ю.Д.
Преподаватель: Авдеенко Т.В.
Васильев М.А.
Новосибирск
2009
Цель работы
Понять принципы создания, управления и использования внутренних баз данных в Прологе, научиться использовать их при проектировании программ. Понять механизм отката и его использование для организации циклов.
Задание
Измените свое задание из лабораторной работы № 2 таким образом, чтобы все основные факты вашей программы хранились во внутренней базе данных (считывались из файла, обрабатывались программой и снова записывались в файл). При этом введите диалог с пользователем для добавления и удаления фактов в базу данных, просмотра содержимого базы данных и т.д.
domains
name, sex=string.
number, cost, from, to=integer.
database - toy
nondeterm игрушка (number, name)
database - price
nondeterm цена (number, cost).
database - gender
nondeterm пол (number, sex).
database - age
nondeterm возрастное_ограничение (number, from, to).
predicates
nondeterm программа().
nondeterm игра(integer).
nondeterm repeat.
Clauses
repeat.
repeat:- repeat.
программа():- repeat, nl,
write("Спавочно-информацтонная система магазина игрушек \n"),
write ("\n"),
write ("Вы можете получить следующюю информацию о нашем магазине: \n"),
write ("1. Вся информация о игрушках магазина \n"),
write ("2. Цена игрушки \n"),
write ("3. Поиск подходящей игрушки по стоимости \n"),
write ("4. Список наиболее дорогих игрушек \n"),
write ("5. Поиск игрушки по заданным параметрам \n"),
write ("6. Загрузить базу фактов \n"),
write ("7. Добавить новые данные \n"),
write ("8. Удалить данные \n"),
write ("9. Сохранить данные \n"),
write ("\n"),
readint(X),
игра(X), fail.
игра(1) :-
write("Вы выбрали запрос №1 \n"),
write ("Вы получите подробную информацию обо всех игрушках \n"),
write("\n"),
игрушка(X1,X2), возрастное_ограничение(X1,X3,X4), пол(X1,X5), цена(X1,X6),
write("Номер игрушки ", X1, "\n", "Название игрушки ", X2, "\n", "Игрушка для детей от ", X3, "\n", "до ",X4, "\n", "Игрушка для мальчиков(М)/Девочек(Ж) ",X5, "\n", "Стоимость игрушки ", X6, "\n"),
write("\n").
игра(2) :-
write("Вы выбрали запрос №2 \n"),
write ("Вы получите подробную информацию о стоимости игрушки \n"),
write("\n"),
игрушка(X1,X2), цена(X1,X3),
write("Номер игрушки", X1, "\n", "Название игрушки", X2, "\n", "Стоимость", X3, "\n"),
write("\n").
игра(3) :-
write("Вы выбрали запрос №3 \n"),
write ("Вы подбираете игрушку по стоимости \n"),
write("\n"),
write("Введите цену, которую не должна превышать игрушка \n"),
readint(S),
цена(X1,X2), X2=S, игрушка(X1,X3),
write("Стоимость", X2, "\n", "Номер игрушки", X1, "\n", "Название", X3, "\n"),
write("\n").
игра(4) :-
write("Вы выбрали запрос №4 \n"),
write ("Вы хотите узнать о наиболее дорогих угрушках \n"),
write("\n"),
write("Введите цену наиболее дорогой игрушки \n"),
readint(S),
цена(X1,X2), X2>=S-100, игрушка(X1,X3),
write("Стоимость", X2, "\n", "Номер игрушки", X1, "\n", "Название", X3, "\n"),
write("\n").
игра(5) :-
write("Вы выбрали запрос №5 \n"),
write ("Вы хотите найти игрушку по параметрам \n"),
write("\n"),
write("Пол ребёнка? (М/Ж) \n"),
readln(P),
write("Возраст? \n"),
readint(A),
write("Стоимость до \n"),
readint(S),
игрушка(X1,X2), возрастное_ограничение(X1,X3,X4), X3<=A, пол(X1,X5), X5=P, цена(X1,X6), X6<S,
write("Номер игрушки ", X1, "\n", "Название игрушки ", X2, "\n", "Игрушка для детей от ", X3, "\n", "до ",X4, "\n", "Игрушка для мальчиков(М)/Девочек(Ж) ",X5, "\n", "Стоимость игрушки ", X6, "\n"),
write("\n").
Игра(6):-
write("Вы выбрали запрос №6 \n"),
write("Загрузка базы фактов \n"),
write("\n"),
consult ("C://program files//prolog//examples", toy),
consult ("C://program files//prolog//examples", price),
consult ("C://program files//prolog//examples", gender),
consult ("C:/program files//prolog//examples", age),
write("База фактов успешно загружена \n").
игра(7):-
write("Вы выбрали запрос №7 \n"),
write("Вы сможете добавить новую игрушку \n"),
write("\n"),
write("Введите номер игрушки \n"),
readint(A),
write("Введите название игрушки \n"),
readln(B),
write("Введите цену игрушки \n"),
readint(C),
write("Введите для кого предназначена игрушка М/Ж \n"),
readln(D),
write("Введите от скольки лет игрушка \n"),
readint(E),
write("Введите до скольки лет игрушка \n"),
readint(F),
assertz(игрушка (A, B), toy),
assertz(цена (A,C), price),
assertz(пол (A,D), gender),
assertz(возрастное_ограничение (A,E,F), age),
write("Вы добавили новую игрушку \n").
игра(8):-
write("Вы выбрали запрос №8 \n"),
write("Вы можете удалить игрушку \n"),
write("\n"),
write("Введите номер игрушки \n"),
readint(A),
retract(игрушка (A, _), toy),
retract(цена(A,_), price),
retract(пол(A,_), gender),
retract(возрастное_ограничение (A,_,_), age),
write("Вы удалили игрушку \n в случае ошибки, выйдите не сохраняясь").
игра(9):-
write("Вы выбрали запрос №9 \n"),
write("Сохранение данных \n"),
write("\n"),
save ("C://program files//prolog//examples", toy),
save ("C://program files//prolog//examples", price),
save ("C://program files//prolog//examples", gender),
save ("C:/program files//prolog//examples", age),
write("Данные успешно сохранены \n").
goal
программа().
Диалог
Рис. 1 Опции
Рис. 2 Ввод новой игрушки
Схема поиска решений нахождения игрушки по параметрам:
Допустим, нам необходимо найти игрушку для мальчика 5 лет, стоимостью не выше 500 рублей.
1. A :- B(X), C(X, Y), D(Y, Z).
2. B(M)
3. C(M,5)
4. D(5,500)
Дерево поиска решений будет иметь вид:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.