МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Новосибирский Государственный Технический Университет
Кафедра экономической информатики
Лабораторная работа №2
«Разработка простейшего варианта дедуктивной базы данных»
Вариант 5
Факультет: Бизнеса
Группа: ФБИ-71
Студенты: Габова Л.А.,
Хуторненко В.А.,
Щелконогова К.М.
Проверили: Авдеенко Т.В.,
Бакаев М.А.
Новосибирск , 2010
Цель работы
1) Ознакомиться с особенностью работы Турбо(Visual версий 4-5.2) -оболочки для языка ПРОЛОГ, с принципами программирования и структурой программы в Турбо(Visual) -Прологе.
2) На примере простейших баз данных научиться описывать факты и простейшие отношения между объектами в формально-логической модели представления знаний.
Задание:
5. Разработать базу данных - лекарства. Необходимо учесть симптомы болезни, возраст больного, противопоказания, стоимость, наличие и т.д. Система должна помогать фармацевту подбирать покупателям лекарства без рецептов (по ряду симптомов и противопоказаний) и в соответствии с их финансовыми возможностями.
Текст программы:
domains
age=integer.
minage=integer.
maxage=integer.
sympt1=symbol.
sympt2=symbol.
sympt3=symbol.
sympt4=symbol.
sympt5=symbol.
sympt6=symbol.
pr1=symbol.
pr2=symbol.
pr3=symbol.
cash=short.
namedrug=symbol.
cost=short.
nalichie=integer.
namedis=symbol.
predicates
%nondeterm client(age,sympt1,sympt2,sympt3,pr3,cash).
nondeterm drug(namedrug,minage,maxage,namedis,pr1,pr2,cost,nalichie).
nondeterm disease(namedis,sympt4,sympt5,sympt6).
nondeterm maxcost(namedrug,cost,namedis).
nondeterm recept(namedrug,cost,pr3,sympt1,sympt2,sympt3,age,cash).
clauses
drug(erius,12,100,allergy,giperchuvstv,berem,487,0).
drug(zirtek,12,100,allergy, giperchuvstv,berem,182,10).
drug(suprastin,1,100,allergy,giperchuvstv,berem,138,20).
drug(otipax,1,100,otit,giperchuvstv,berem,117,25).
drug(enterosGel,0,100,foodpoisoning,o,o,185,8).
drug(ugolAkt,0,100,foodpoisoning,o,o,5,30).
drug(smekta30,0,100,foodpoisoning,giperchuvstv,o,326,5).
drug(smekta1,0,100,foodpoisoning,giperchuvstv,o,15,30).
drug(ketanov,16,100,bol,yazva,berem,31,25).
drug(nurofen,12,100,bol,serdechnaya_nedostatochnost,gemophiliya,127,15).
drug(sulfacil_natriya,0,100,konuktivit,gyperchuvstv,o,23,18).
drug(visin,2,100,konuktivit,gyperchuvstv,berem,154,12).
drug(antigrippin,12,100,gripp,gyperchuvstv,yazva,109,21).
drug(antigrippinD,3,12,gripp,gyperchuvstv,yazva,103,19).
drug(ksimelin,5,100,nasmork,o,o,87,50).
drug(pinasol,5,100,nasmork,o,o,62,45).
drug(korvalol,18,100,rastr_serd_sos_syst,gyperchuvstv,pochechn_nedost,12,14).
disease(allergy,chihanie,slezotochivost,kojnyvisip).
disease(otit,bol_v_uhe,zalozhennost_uha,o).
disease(foodpoisoning,toshnota,dirrhea,blednost).
disease(bol,ostraya_bol,prodolzhitelnaya,kratkovremennaya).
disease(nasmork,zalozhennost_nosa,vydelenia_is_nosa,vospalenie_slizistoy).
disease(konuktivit,pokrasnenie,gnoi,slezotochivost).
disease(gripp,tempr,oznob,bol_v_gorle).
disease(rastr_serd_sos_syst,nevroz,tahikordiya,bol_v_grudy).
maxcost(X,Y,Z):-drug(X,_,_,Z,_,_,Y,_),drug(S,_,_,Z,_,_,W,_),Y>W,!.
recept(X,Y,Z,W,U,V,Q,R):-drug(X,E,T,B1,I,H,Y,D),Q<T,Q>E,D>0,R>Y,disease(B1,A,B,C),A=W or A=U or A=V,!,B=W or B=U or B=V,!,C=W or C=U or C=V,!,Z=H or Z=I,!.
goal
%maxcost(X,Y,allergy).
%maxcost(X,Y,konuktivit).
%recept(X,Y,yazva,toshnota,dirrhea,blednost,5,300).
%recept(X,Y,berem,zalozhennost_nosa,vydelenia_is_nosa,vospalenie_slizistoy,25,150).
%recept(X,Y,net,tempr,oznob,bol_v_gorle,4,110).
%recept(X,Y,net,bol_v_uhe,zalozhennost_uha,o,35,300).
%recept(X,Y,serdechnaya_nedostatochnost,ostraya_bol,prodolzhitelnaya,kratkovremennaya,27,200).
%recept(X,Y,net,pokrasnenie,gnoi,slezotochivost,3,160).
recept(X,Y,berem,chihanie,slezotochivost,kojnyvisip,36,500).
Результаты выполнения:
1) maxcost(X,Y,allergy).
Найти лекарство от аллергии с наибольшей ценой.
2) maxcost(X,Y,konuktivit).
Найти лекарство от коньюктевита с наибольшей ценой.
Цели 3) - 9): Найти лекарство от болезни, которая определяется по симптомам, названным клиентом, учитывая противопоказания, возраст клиента, количество наличных денег и наличие лекарства на складе.
3) recept(X,Y,yazva,toshnota,dirrhea,blednost,5,300).
Найти лекарство от болезни, которая определяется по симптомам, названным клиентом, учитывая противопоказания, возраст клиента, количество наличных денег и наличие лекарства на складе.
4) recept(X,Y,berem,zalozhennost_nosa,vydelenia_is_nosa,
vospalenie_slizistoy,25,150).
4) recept(X,Y,net,tempr,oznob,bol_v_gorle,4,110).
5) recept(X,Y,net,bol_v_uhe,zalozhennost_uha,o,35,300).
7) recept(X,Y,serdechnaya_nedostatochnost,ostraya_bol,prodolzhitelnaya, kratkovremennaya,27,200).
8) recept(X,Y,net,pokrasnenie,gnoi,slezotochivost,3,160).
9) recept(X,Y,berem,chihanie,slezotochivost,kojnyvisip,36,500).
Декларативный смысл фактов и правил:
drug(X,Z,Y,U,W,V,Q,P).
Лекарство с названием X, с возрастными ограничениями от Z до Y, для лечения болезни U, с противопоказаниями к применению W, V, ценой Q при наличии P штук.
disease(X,Y,Z,U).
Болезнь с названием X, с симптомами Y, Z, U.
maxcost(X,Y,Z):-drug(X,_,_,Z,_,_,Y,_),drug(S,_,_,Z,_,_,W,_),Y>W,!.
Если есть лекарство X, от болезни Z, с ценой Y и лекарство S, от болезни Z, с ценой W и Y больше W, то лекарство X имеет максимальную цену среди лекарств от болезни Z.
recept(X,Y,Z,W,U,V,Q,R):-drug(X,E,T,B1,I,H,Y,D),Q<T,Q>E,D>0,R>Y,disease(B1,A,B,C),A=W or A=U or A=V,!,B=W or B=U or B=V,!,C=W or C=U or C=V,!,Z<>H or Z<>I,!.
Если есть такое лекарство X с возрастными ограничениями к употреблению от E до T лет, от болезни B1, с противопоказаниями I и H, по цене Y и в наличии D штук, при условии, что возраст пациента больше E и меньше T, при условии, что лекарство есть в наличии, у пациента достаточно средств R для покупки лекарства по цене Y, и болезнь B1 с симптомами A, B, C, при равенстве этих симптомов симптомам пациента W,U,V и противопоказание клиента Z не равно противопоказаниям лекарства H,I.
Дерево поиска решений:
Для цели maxcost(X,Y,Z)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.