Лабораторные работы по «Функциональному и логическому программированию»
Автор: adsa • Октябрь 3, 2019 • Лабораторная работа • 523 Слов (3 Страниц) • 467 Просмотры
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «Национальный исследовательский ядерный университет «МИФИ» |
Димитровградский инженерно–технологический институт – филиал федерального государственного автономного образовательного учреждения высшего образования «Национальный исследовательский ядерный университет «МИФИ» (ДИТИ НИЯУ МИФИ) |
ОТЧЕТ
Лабораторные работы
По дисциплине «Функциональное и логическое программирование»
Выполнил: Студент гр. ВТ-21
Чатта Александр Владимирович
Проверила:
Горбунова Екатерина Андреевна
Димитровград, 2019
Лабораторная работа №1
Вариант 1
Составить программу для имитации работы с простой базой данных, заполненной в указанной тематике. В базе должно быть не менее 30 записей и не менее 6 полей в каждой записи. База данных хранится в файле.
База данных хранятся в файле db.txt. Для того чтобы загрузить список видеокарт воспользуемся предикатом
Consult ("C:\\Users\\Public\\Documents\\Userrov\\Lab1\\Lab1\\db.txt"),
[pic 1]
Рис 1 – файл db.txt
Вывод всех записей из файла осуществляется следующим образом:
printall:-retract(product(Item)),
print(Item),fail.
print(Item):- Item=videocard(Mark,Price,Model,Connection_interface,Processor_frequency,DirectX_version),
writef("%-20\t%-20\t%-20\t%-30\t%-30\t%-20",Mark,Price,Model,Connection_interface,Processor_frequency,DirectX_version),nl.
[pic 2]
Рис 2 – вывод всех записей
Поиск по конкретному значению.
findByMark(Mark,Item):-retract(product(Item)),
Item=videocard(Mark,_,_,_,_,_).
Считывается текст, введённый с клавиатуры. Далее на экран выводятся только те видеокарты, которые подходят под условие
[pic 3]
Рис 3 – поиск по конкретному полю
Поиск по одному из числовых полей.
choice(3):-writef("Введите минимальную цену : "),
readint(Min),
writef("Введите максимальную цену: "),
readint(Max),
writef("%-20\t%-20\t%-20\t%-30\t%-30\t%-20","mark","price","model","connection_interface","processor_frequency","directX_version"),nl,
findByPrice(Min,Max,Item),
print(Item),fail;true.
Происходит считывание введённых значений. на экран выведутся толь ко те записи которые соответствуют заданному диапазону
[pic 4]
Рис 4- поиск по одному из числовых полей
Добавление элемента в базу данных. Происходит считывание текста с клавиатуры и добавление в базу данных. Далее на экран выводится та информация, которую мы ввели с клавиатуры и сразу же записывает её в файл базы данных.
[pic 5]
Рис 5 – код добавления записи
Удаление элемента из базы данных.
[pic 6]
Рис 6 – код удаления записи
Происходит удаление пункта, который мы добавили выше. Затем файл перезаписывается
Исходный код программы
domains
mark=string
price=real
model=string
connection_interface=string
processor_frequency=integer
directX_version=string
item=videocard(mark,price,model,connection_interface,processor_frequency,directX_version)
constants
null=0
predicates
determ menu
determ printall
determ print(item)
nondeterm choice (integer)-(i)
nondeterm findByMark(mark,item) - (i,o)
nondeterm findByPrice(price,price,item) - (i,i,o)
nondeterm findByModel(model,item) - (i,o)
nondeterm findByConnection_interface(connection_interface,item) - (i,o)
nondeterm findByProcessor_frequency(processor_frequency,item) - (i,o)
nondeterm findByDirectX_version(directX_version,item) - (i,o)
facts
product(Item)
clauses
menu:-write(" âûáåðèòå äåéñòâèå:"),nl,
write(" 1 - íàïå÷àòàòü"),nl,
write(" 2 - ïîèñê ïî ìàðêå"),nl,
write(" 3 - ïîèñê ïî öåíå"),nl,
write(" 4 - ïîèñê ïî ìîäåëè"),nl,
write(" 5 - ïîèñê ïî èíòåðôåéñó ïîäêëþ÷åíèÿ"),nl,
write(" 6 - ïîèñê ïî ÷àñòîòå ïðîöåññîðà"),nl,
write(" 7 - ïîèñê ïî âåðñèè DirectX"),nl,
write(" 8 - äîáàâèòü çàïèñü"),nl,
write(" 9 - óäàëèòü çàïèñü"),nl,
readint(C),
consult("C:\\Users\\Public\\Documents\\Userrov\\Lab1\\Lab1\\db.txt"),
...