Смекни!
smekni.com

Интеллектуальные информационные системы 6 (стр. 6 из 6)

Ниже приведен текст программы (файл v8_212.prw)

%2.1.2.

МАМА(Оля,Петя);

ПАПА(Сергей,Катя);

МАМА(Лена,Сергей);

ПАПА(Толя,Оля);

БАБУШКА(X,Y)<-МАМА(X,Z),МАМА(Z,Y);

БАБУШКА(X,Y)<-МАМА(X,Z),ПАПА(Z,Y);

ДЕДУШКА(X,Y)<-ПАПА(X,Z),ПАПА(Z,Y);

ДЕДУШКА(X,Y)<-ПАПА(X,Z),МАМА(Z,Y);

Далее рассмотрим применение программы. Программа отвечает на вопросы о составе семьи.

Приведем примеры запросов:

? ДЕДУШКА(X,Петя);

? МАМА(X,Y);

Результат работы программы:

X=Коля

X=Оля

Y=Катя

X=Лена

Y=Сергей

Задача 2.2.4

2.2.4. На языке Пролог-Д напишите базу знаний, в которой определяется функция, заданная соотношением:

ìx, если x <-1,

F(x)= í x+1, если -1<x<1,

îx, если x >1.

Разрабатываемая программа предназначена для вычисления значений функции, указанной в задании. Программа вычисляет значения функции для аргументов, задаваемых пользователем.

Ниже приведен текст программы (файл v8_224.prw)

%2.2.4

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(X,-1),РАВНО(-1,F);

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(-1,X),МЕНЬШЕ(X,1),СЛОЖЕНИЕ(X,1,F);

ЗНАЧЕНИЕ(X,F)<-МЕНЬШЕ(1,X),РАВНО(X,F);

Приведем примеры запросов:

%Примеры вычислений

?ЗНАЧЕНИЕ(2,F);

?ЗНАЧЕНИЕ(-3,F);

?ЗНАЧЕНИЕ(0.2,F);

Результат работы программы:

F=2

F=-1

F=1.2

Нетрудно убедиться, что вычисления выполненны верно.

Чтобы работать с программой необходимо делать запросы: ЗНАЧЕНИЕ(аргумент,F);

После выполнения запроса в F будет содержатся значение вычисленного выражения.

Задача 2.2.5

2.2.5. Какие сложности могут возникнуть в базе знаний о мамах, если у двух мам дети будут тезками? Напишите программу на Прологе-Д, которая находит имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

Если в базе знаний о мамах, двух мам дети будут тезками, могут возникнуть сложности с однозначным определением имени матери.

Разрабатываемая программа предназначенна для того, чтобы определять имена матерей по именам их детей.

Ниже приведен текст программы (файл v8_225.prw)

%2.2.5.

%База мам и детей

МАМА(1,Наташа,Катя);

МАМА(2,Саша,Петя);

МАМА(3,Света,Ваня);

МАМА(4,Лена,Катя);

Пример запроса в ситуации, когда у матерей дети – тезки

%Какие сложности могут возникнуть в базе знаний о мамах, если у двух мам дети будут тезками?

? МАМА(_,X,Катя);

X=Наташа

X=Лена

Итак, для ребенка мы получили 2-х матерей.

Следующая часть задания:

%Поиск имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

? МАМА(2,X,Петя),РАВНО(X,Саша),НЕ(РАВНО(X,Оля));

Результат работы:

X=Саша

Итак, мы определили имя мамы мальчика Петя второго по порядку в базе знаний. Его маму зовут Оля, а не Саша.

Задача 2.3.2

2.3.2. Написать на языке Пролог-Д базу знаний, описывающую вычисление суммы чисел натурального ряда.

Разрабатываемая программа предназначена для вычисления суммы ряда натуральных чисел. Для выполнения задания воспользуемся следующим рекурсивным определением искомой cуммы:

1)S(0)=0

2)S(n)=n+S(n-1)

Ниже приведен текст программы (файл v8_232.prw)

%2.3.2.

%унификация вычисленного значения с выходной переменной

Сумма(0,S,S);

%рекурсивный вызов процедуры поиска суммы пока N>0

Сумма(N,P,S)<-СЛОЖЕНИЕ(N,P,L),СЛОЖЕНИЕ(M,1,N),Сумма(M,L,S),!;

Пример использования программы:

%пример вызова предиката

? Сумма(10,S);

Результат:

S=55

Несложная проверка показывает правильность произведенных вычислениий.

Для использования программы, надо вызывать предикат Сумма(X,S), подставляя вместо X число, до которого надо найти сумму.

Задача 2.3.1

2.3.1. Написать на языке Пролог-Д базу знаний, описывающую вычисление факториала.

Программа предназначенна для вычисления факториала числа n!=1*2*3…*n.

Воспользуемся следующим рекурсивным определением факториала:

1)0!=1

2)n!=n*(n-1)!

Итак, будем рекурсивно вызывать факториал, пока аргумент не станет равным – 0.

Программа аналогична программе для поиска суммы натуральных чисел.

Ниже приведен текст программы (файл v8_231.prw)

%2.3.1.

Факториал(N,F)<-Факториал(N,1,F);

%унификация вычисленного значения с выходной переменной

Факториал(0,F,F);

%рекурсивный вызов процедуры вычисления факториала, N*(N-1)*(N-2).....2*1 пока N>0

Факториал(N,P,F)<-УМНОЖЕНИЕ(N,P,S),СЛОЖЕНИЕ(M,1,N),Факториал(M,S,F),!;

Пример использования программы:

%пример вызова предиката

? Факториал(5,F);

Результат:

F=120

Несложная проверка показывает правильность произведенных вычислениий.

Для использования программы, надо вызывать предикат Факториал(X,F), подставляя вместо X число, факториал которого надо найти . Следует учесть, что факториал растет очень быстро и не задавать больших значений аргумента.

Задача 2.4.1

2.4.1. Напишите на языке Пролог-Д базу знаний, описывающую прямоугольный треугольник.

Разрабатываемая программа предназначена для рисования прямоугольного треугольника по его катетам. Задача заключается в том, чтобы по катетам найти координаты вершин и соединить их прямыми линиями.

Ниже приведен текст программы (файл v8_241.prw)

%2.4.1.

%рисуем прямоугольный треугольник с катетами a и b

ПрямоугТреуг(a,b)<-ЗАПИСЬ_В("grp:"),СЛОЖЕНИЕ(10,a,c),СЛОЖЕНИЕ(10,b,d),

ЛИНИЯ(10,10,c,10,1),ЛИНИЯ(c,10,10,d,1),ЛИНИЯ(10,d,10,10,1);

Пример использования программы:

%Пример

? ПрямоугТреуг(100,150);

Для того, чтобы построить треугольник с требуемыми катетами, достаточно вызвать предикат ПрямоугТреуг, задав параметры.

Результат выполнения примера:

Задача 2.5.4

2.5.4. Напишите базу знаний, описывающую удаление n-oго элемента списка

Разрабатываемая программа предназначена для удаления элемента с заданным номером из списка.

Для реализации решения нам потребуется один раз прочитать список и записать все элементы, за исключением удаляемого, в другой в обратном порядке. После чего потребуется переписать список, с удаленным заданным элементом, в прямом порядке.

Ниже приведен текст программы (файл v8_254.prw)

% 2.5.4

%Предикат удаления N-ого символа из списка L и помещение результата в список S

%Первый вызов DELNEL(L,N,1,[],Z) - удаляет символ и записывает результат в обратном порядке

% второй вызов DELNEL(L,0,1,[],S) - обращает обратно

DELNEL(L,N,S)<-DELNEL(L,N,1,[],Z),DELNEL(Z,0,1,[],S);

DELNEL([],_,_,S,S);

%если не N-ный символ

DELNEL([X|T],N,I,Y,S)<- НЕ(РАВНО(N,I)),ДОБАВИТЬ(X,Y,Z),СЛОЖЕНИЕ(1,I,J),DELNEL(T,N,J,Z,S);

%если N-ный символ

DELNEL([X|T],N,I,Y,S)<-РАВНО(N,I),СЛОЖЕНИЕ(I,1,J),DELNEL(T,N,J,Y,S);

%добавление элемента X в начало списка Y

ДОБАВИТЬ(X,Y,[X|Y]);

Пример использования программы, удалим 3-й элемент из списка:

%пример работы.

? DELNEL([1,8,9,7,5],3,S);

Результат выполнения примера:

S=[1,8,7,5]

Для того, чтобы удалить элемент из списка необходимо вызвать предикат DELNEL, задав в качестве параметров, список, номер удаляемого элемента и имя результирующего списка.

Список литературы

1. Абдикеев Н.М. Проектирование интеллектуальных систем в экономике. Учебник / М.: Экзамен, 2004 – 526с.

2. Алексеев М.Н., Бешенков С.А., Гейн А.Г., Григорьев С.Г. Информатика и информационные технологии: практические работы / Миасс, 2000 - 42 с.

3. Бешенков С.А., Гейн А.Г., Григорьев С.Г. Информатика и информационные технологии. Екатеринбург: Уральский рабочий, 1995 - 134 с.

4. Бешенков С.А. Школьная информатика: новый взгляд, новый курс// Педагогическая информатика. N2. 1993 с. 5-10

5. Гаврилова Т.А., Хорошевский В.Ф., Базы знаний интеллектуальных систем. Учебник/ Санкт-Петербург:Питер, 2000- 382 с.

6. Григорьев С.Г., Морозова Е.В. Информатика и информационные технологии: Сборник задач / ЛБЛ-Балтика. Санкт-Петербург, 1996 – 32 с.