close

Вход

Забыли?

вход по аккаунту

?

ЛП5 Настя

код для вставкиСкачать
Министерство образования и науки Украины
Севастопольский национальный технический университет
Кафедра кибернетики и
вычислительной техники
Лабораторная работа № 5
по дисциплине "Логическое программирование"
"РАБОТА С ДИНАМИЧЕСКИМИ БАЗАМИ ДАННЫХ"
Вариант № 19
Выполнила: ст. гр. М-43д
Фомина А.Б.
Проверил: доц. Брюховецкий А.А.
2011
Цель работы: Изучить средства среды логического программирования Visual Prolog для работы с динамическими базами данных.
Порядок выполнения работы:
1. Составить программу, решающую задачу по индивидуальному варианту.
2. Подобрать тестовые данные и протестировать программу на компьютере.
Вариант задания - № 10 ([19 mod 10] + 1) "Фирма по продаже компьютеров"
Составить программу, реализующую следующие операции с базой данных:
1. Добавление записей
2. Удаление конкретной записи по заданному значению
3. Поиск заданной записи
4. Вывод данных из базы данных.
Теоретические сведения:
Раздел database в Прологе предназначен для описания предикатов базы данных, таких как cathedra. Все различные утверждения этого предиката составляют динамическую базу данных Пролога. База данных называется динамической, так во время работы программы из нее можно удалять любые содержащиеся в ней утверждения, а также добавлять новые. В этом состоит ее отличие от "статических" баз данных, где утверждения являются частью кода программы и не могут быть изменены во время счета. Другая важная особенность динамической базы данных состоит в том, что такая база может быть записана на диск, а также считана с диска в оперативную память.
Предикаты asserta, assertz и retract позволяют занести факт в заданное место динамической БД и удалить из нее уже имеющийся факт.
Предикат asserta заносит новый факт в базу данных, располагающуюся в оперативной памяти компьютера (резидентная БД). Новый факт помещается перед всеми уже внесенными утверждениями данного предиката. Этот предикат имеет такой синтаксис:
asserta(Clause).
Предикат assertz так же, как и asserta, заносит новые утверждения в базу данных. Однако он помещает новое утверждение за всеми уже имеющимися в базе утверждениями того же предиката. Синтаксис предиката столь же прост: assertz(Clause).
Предикат retract удаляет утверждение из динамической БД Его синтаксис таков:
retract(Existing_clause).
Ход работы:
Определим структуру базы данных "Фирма по продаже компьютеров":
computers (integer, string, string, string, integer, string), где первое поле определяет ID товара, второе - тип товара, третье - описание товара, четвертое - его цену, а пятое - доступность товара на складе.
Зададим в БД следующие начальные значения:
computers(325568,"Ноутбук","HP Pavilion dv6-6002er 15.6 (1.8GHz),6GB,1TB,HD6650M",6974,"На складе").
computers(457453,"Компьютер","i3-2100T 2.5GHz/P8H61-M/GTX550 Ti 1Gb DDR5/1.5Tb",5842,"На складе").
computers(645784,"Ноутбук","DELL Inspiron N5110 15.6 i5-2410M (2.3GHz),6GB,",6018,"Ожидается").
computers(356735,"Компьютер","INTEL C2D E6600 3.06GHz/P5G41T-M LX3",5902,"На складе").
computers(356782,"Компьютер","PHENOM II X4 840 3.2GHz/M5A78L-M LX/GTX550 ",6842,"Ожидается").
computers(427245,"Компьютер","AMD FM1 X4 631 2.6GHz/F1A55/GTX550",5892,"Неизвестно").
Добавление и удаление записей из базы данных будем производить с помощью встроенных предикатов assertz и retractall соответственно.
Структура предиката для поиска записи в динамической базе данных. Отношение детерминизма для данного предиката - nondeterm(o,i,o,o,o). Предикат осуществляет поиск записей по типу товара, и возвращает ID, описание, цену и доступность на складе для определенного типа товара. Параметры B,C,E предиката - строки, A, D - целые числа. В параметрах A,C,D,E помещается результат поиска.
Структура предиката для вывода динамической базы данных. Отношение детерминизма для данного предиката - nondeterm(о,о,o,o,o). Предикат возвращает все записи базы данных в следующем формате: ID товара, тип товара, описание товара, цену товара, доступность товара на складе. Параметры B,C,E предиката - строки, A, D - целые числа.
Текст программы:
implement main
open core, console constants
className = "main".
classVersion = "".
class facts
computers:(integer, string, string, integer, string).
class predicates
search:(integer, string, string, integer, string) nondeterm(o,i,o,o,o).
search1:(integer, string, string, integer, string) nondeterm(o,o,o,o,o).
print:(string) procedure(i).
print1:() procedure().
clauses classInfo("main", "append").
computers(325568,"Ноутбук","HP Pavilion dv6-6002er 15.6 (1.8GHz),6GB,1TB,HD6650M",6974,"На складе").
computers(457453,"Компьютер","i3-2100T 2.5GHz/P8H61-M/GTX550 Ti 1Gb DDR5/1.5Tb",5842,"На складе").
computers(645784,"Ноутбук","DELL Inspiron N5110 15.6 i5-2410M (2.3GHz),6GB,",6018,"Ожидается").
computers(356735,"Компьютер","INTEL C2D E6600 3.06GHz/P5G41T-M LX3",5902,"На складе").
computers(356782,"Компьютер","PHENOM II X4 840 3.2GHz/M5A78L-M LX/GTX550 ",6842,"Ожидается").
computers(427245,"Компьютер","AMD FM1 X4 631 2.6GHz/F1A55/GTX550",5892,"Неизвестно").
search(A,B,C,D,E):-computers(A,B,C,D,E).
search1(A,B,C,D,E):-computers(A,B,C,D,E).
print1():-search1(A,B,C,D,E), stdIO::nl, write("ID: ",A),
stdIO::nl, write("Тип: ", B),
stdIO::nl, write("Описание: ", C),
stdIO::nl, write("Цена: ", D),
stdIO::nl, write("Доступность: ", E),
stdIO::nl,fail;
succeed.
print(B):-search(A,B,C,D,E), stdIO::nl, write("ID: ",A),
stdIO::nl, write("Тип: ", B),
stdIO::nl, write("Описание: ", C),
stdIO::nl, write("Цена: ", D),
stdIO::nl, write("Доступность: ", E),
stdIO::nl,fail;
succeed.
run():-
console::init(),
write("******************************************************"),
stdIO::nl, write("Содержимое базы данных 'Компьютерная фирма'"),
stdIO::nl, print1(),
stdIO::nl, write("******************************************************"),
stdIO::nl, write("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"),
stdIO::nl, write("Добавим несколько записей в базу данных:"),
assertz(computers(627245,"Компьютер","ATHLON II X2 250 3.0GHz/M4A78LT-LX...",6494,"На складе")),
assertz(computers(627246,"Ноутбук","ASUS Eee PC 1015PEM 10.1``...",5494,"На складе")),
assertz(computers(627247,"Ноутбук","ACER AS5750G-2314G64Mnkk 15.6``...",5412,"Ожидается")),
stdIO::nl, write("Посмотрим содержимое базы после внесения дополнений:"),
stdIO::nl, print1(),
stdIO::nl, write("******************************************************"),
stdIO::nl, write("/////////////////////////////////////////////////////////////////////////////"),
stdIO::nl, write("Удалим недавно добавленные записи"),
stdIO::nl, retractall(computers(627245,"Компьютер","ATHLON II X2 250 3.0GHz/M4A78LT-LX...",6494,"На складе")),
retractall(computers(627246,"Ноутбук","ASUS Eee PC 1015PEM 10.1``...",5494,"На складе")),
retractall(computers(627247,"Ноутбук","ACER AS5750G-2314G64Mnkk 15.6``...",5412,"Ожидается")),
stdIO::nl, write("Содержимое базы после изменений:"),
stdIO::nl, print1(),
stdIO::nl, write("******************************************************"),
stdIO::nl, write("_______________________________________________________"),
stdIO::nl, write("Выведем сначала только компьютеры, а потом - только ноутбуки:"), stdIO::nl,
print("Компьютер"), print("Ноутбук"),
stdIO::nl, write("******************************************************"),
succeed(),
programControl::sleep(100000).
end implement main
goal
mainExe::run(main::run).
Результаты выполнения программы:
Вывод: В ходе выполнения лабораторной работы были изучены средства среды логического программирования Visual Prolog для работы с динамическими базами данных, составлена программа, обеспечивающая выполнение следующих операций над динамическими базами данных: добавление/удаление/поиск записей, вывод данных из базы.
Документ
Категория
Рефераты
Просмотров
48
Размер файла
105 Кб
Теги
настя, лп5
1/--страниц
Пожаловаться на содержимое документа