Описание базы знаний 'Родственные отношения. Поиск путей в ориентированном графе. Решение алгебраических задач
ФИЛИАЛ ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО
БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
УНИВЕРСИТЕТ "МЭИ"
в г. Смоленске
Кафедра Вычислительной техники
Лабораторная работа № 1
По курсу "Основы логического
программирования"
Тема: Описание базы знаний
"Родственные отношения.
Поиск путей в ориентированном графе.
Решение алгебраических задач".
листинг программа логическая граф
Выполнил: Старовойтов И.П.
Группа: ВМ-11з
Преподаватель: Сухачев Н.И.
Смоленск 2014
Цель работы
Отработка начальных навыков работы в среде Турбо Пролога,
ознакомление с основными принципами составления простейших логических программ
на примере баз знаний "Родственные отношения", поиска путей в
ориентированном графе и решения алгебраических задач, имеющих легко
воспринимаемую внутреннюю логику.
Задание 1
Составить семантический граф из 9-12 вершин. Вершинам графа
сопоставить имена родственников, а дугам - родственные отношения. Для
полученного графа разработать логическую программу, которая выдает сведения о
родственных отношениях между любой парой введенных имен.
Мать
Отец
Дядя
domains=symbol(name,name)(name,name)(name,name)(name,name)(name,name)(name,name)(name,name)(name,
name)(name, name)(stepan,lena).(stepan,valya).(maria,lena).(maria,
valya).(valya, denis).(valya,
kostya).(lena,roma).(lena,stas).(stas,sasha).(X,Y): - mother (Z,Y), mother
(X,Z).(X,Y): - mother (Z,Y),father (X,Z).(X,Y): - mother (Z,X),mother (Z,Y).(X,Y):
- mother (Y,X); father (Y,X).(X,Y): - mother (Z,X),father (Y,Z).(X,Y): - mother
(Z,X),mother (Y,Z).: - write ("Введите 1-ое имя: "),readln (X),write ("Введите 2-ое имя"),
readln (Y), otnoshenie (X,Y).(X,Y): - grandfather (X,Y), write (X," дедушка",Y).(X,Y):
- grandmother (X,Y), write (X," бабушка ",Y).(X,Y): - brother (X,Y), write
(X," брат
",Y).(X,Y): - uncle (X,Y),write (X," дядя ",Y).(X,Y): -
mother (X,Y),write (X," мама ",Y).(X,Y): - father (X,Y), write (X,"
папа
",Y).(X,Y): - vnuk (X,Y), write (X," внук ",Y).(X,Y): - child
(X,Y), write (X," сын ",Y).
Задание 2
Составить ориентированный граф без циклов из 7-10 вершин,
среди которых есть и изолированные вершины. Для получения графа составить
программу, определяющую, существует ли путь между любой парой его вершин.
domains=symbol(name,name).(name,name).dialog.(x1,x4).(x1,x3).(x2,x4).(x2,x3).(x4,x3).(x3,x5).(x3,x7).(x1,x3):
- join (x1,x4),join
(x4,x3).(x1,x4).(x1,x3).(x2,x4).(x2,x3).(x4,x3).(x3,x5).(x3,x7).(x1,x5): - join
(x1,x3),join (x3,x5).(x1,x7): - join (x1,x3),join (x3,x7).(x2,x5): - join
(x2,x3),join (x3,x5).(x2,x7): - join (x2,x3),join (x3,x7).(x4,x5): - join
(x4,x3),join (x3,x5).(x4,x7): - join (x4,x3),join (x3,x7).: - write
("Vvedite 1 vershiny: "),readLn (X),write ("Vvedite 2 vershiny:
"),readLn (Y), path (X,Y).
Результаты:: Vvedite 1 vershiny: x12 vershiny: x5: Vvedite
1 vershiny: x1
2 vershiny: x5
NO
Задание 3
Решить квадратное уравнение вида: a*x^2+b*x+c=0
Листинг программы:
domains=real(arg,arg,arg)(A,B,C): -
D=B*B-4*A*C,D>0,Y1= (-B+sqrt (B*B-4*A*C)) / (2*A),Y2= (-B-sqrt (B*B-4*A*C))
/ (2*A),write (Y1),write (","),write (Y2).(A,B,C): -
D=B*B-4*A*C,D=0,Y= (-B) / (2*A),write (Y).(A,B,C): - D=B*B-4*A*C,D<0,write
("Net korney").
Задание 4
Вычислить значение функции вида:
где f1 (x), f2 (x), f3 (x) - некоторые
функции от переменной x.
Вариант 8.
Листинг программы:
domains
arg=real
predicates(arg)(X): - 0<X,X<2,write
("vvedite a: "),readreal (A),write ("vvedite c: "),
readreal (C),Y=A*X*X+C*X+sqrt (X),write ("Y=",Y).(X): - 2<=X,X<4,Y=cos
(X) +sin (X) *sin (X) *sin (X),write ("Y=",Y).(X): - 4<=X,write
("vvedite a: "), readreal (A), Y=A*A+2*ln (X) /ln (10),write
("Y=",Y).