4 программы на прологе (база знаний, работа со списками, графические возможности и функция)! - Prolog
Формулировка задачи:
1. Создать базу данных о заданной предметной области в виде множества фактов языка Пролог (не менее 5 фактов). Информацию о каждом компоненте БД представить в виде структуры. Разработать набор предикатов, осуществляющих взаимодействие с БД, при помощи которых можно реализовать все типы запросов, приведенные в варианте задания.
Предметная область – учебная группа факультета. Каждая учебная группа может быть описана структурой: название факультета, код специальности, номер группы, состав группы. Состав группы может быть описан списком структур, описывающих отдельного студента: фамилия, имя, отчество, пол, год рождения, обучение на военной кафедре, сводная ведомость. Сводная ведомость может быть описана списком из следующих структур: предмет, оценка.
Реализовать следующие типы запросов:
а)Подсчитать число групп на указанном факультете;
б)Найти всех студенток, обучающихся по указанной специальности;
в)Найти группу, которая сдала больше всего предметов сессию;
г)Найти всех студентов, имеющих задолженности;
д)Найти всех студентов, обучающихся на военной кафедре.
2. Вычислите сумму первых n членов степенного ряда с общим членом (рис)
3. вывести на экран изображение
4. Напишите базу знаний, описывающую обращение списка (первый элемент становится последним).
версии пролога: Visual Prolog 5.2 или ПРОЛОГ-Д.
Буду очень признательна за любую помощь!
Решение задачи: «4 программы на прологе (база знаний, работа со списками, графические возможности и функция)!»
textual
Листинг программы
DOMAINS predmet=v(string,integer) predmeti=predmet* student=s(string,string,string,string,integer,string,predmeti) studenti=student* list=integer* slist=string* PREDICATES nondeterm g(string,integer,integer,studenti). nondeterm chislo_grupp(string,integer). nondeterm length(list,integer). nondeterm vse_studentki(integer,slist). nondeterm studentka(string,integer). nondeterm member(student,studenti). nondeterm member(predmet,predmeti). nondeterm kolvo_predmetov(string,integer,integer). nondeterm ocenka(string,integer,integer). nondeterm bolshe(integer). nondeterm bolshe_vsego_predmetov(string,integer). nondeterm zadolznosti(slist). nondeterm dvoika(string). nondeterm na_voennoi(string). nondeterm vse_na_voennoi(slist). CLAUSES g(mat,100,1,[s(alla, ivanovna, shajdurova,g,1990,n,[v(matan,5),v(algebra,4)]),s(sergey, aleksandrovich, vakurov,m,1991,y,[v(matan,3)]),s(vera, valerevna, patrusheva,g,1989,n,[v(matan,4),v(algebra,3)])]). g(fiz,101,2,[s(ruslan, aleksandrovich, lutov,m,1990,y,[v(optika,3),v(termeh,2)]),s(kiril, ilich, petrov,m,1989,y,[v(termeh,4)])]). g(inf,102,3,[s(sergey, vladimirovich, smolin,m,1989,y,[v(prolog,3),v(vbasic,4)]),s(anna, petrovna, sidyakina,g,1988,n,[v(prolog,3),v(vbasic,5)])]). length([],0). length([_|Tail],N):-length(Tail,N1),N=N1+1. chislo_grupp(F,N):-findall(Number,g(F,_,Number,_),List),length(List,N). member(H,[H|_]). member(H,[_|Tail]):-member(H,Tail). studentka(Surname,S):-g(_,S,_,Students),member(s(_,_,Surname,g,_,_,_),Students). vse_studentki(S,List):-findall(Surname,studentka(Surname,S),List). ocenka(F,G,O):-g(F,_,G,Students),member(s(_,_,_,_,_,_,Ocenki),Students),member(v(_,O),Ocenki). kolvo_predmetov(F,G,N):-findall(Ocenka,ocenka(F,G,Ocenka),List),length(List,N). bolshe(N):-kolvo_predmetov(_,_,M), M>N. bolshe_vsego_predmetov(F,G):-kolvo_predmetov(F,G,N),not(bolshe(N)). dvoika(Surname):-g(_,_,_,Students),member(s(_,_,Surname,_,_,_,Ocenki),Students),member(v(_,2),Ocenki),!. zadolznosti(List):-findall(Surname,dvoika(Surname),List). na_voennoi(Surname):-g(_,_,_,Students),member(s(_,_,Surname,_,_,y,_),Students). vse_na_voennoi(List):-findall(Surname,na_voennoi(Surname),List). goal %chislo_grupp(mat,N). %vse_studentki(100,L). %bolshe_vsego_predmetov(F,G). %zadolznosti(L). vse_na_voennoi(L).