ЯЗык "Пролог". Понятие базы знаний, определение. Задачи и упражнения, страница 9

- угол между сторонами аи Ь. Пусть с - наибольшая из сторон (или одна из них, если треугольник равнобедренный). Тогда в тупоугольном треугольнике с2 > а2 + Ь2, а в остроугольном - с2 < а2 + Ь2. Для тупоугольного треугольника правило на Прологе будет таким:

тупоуг(Имя):- кандидатами,А,В,С), треуг(Имя), max3(A,B,C,D), квадрат(О,Р), квадрат(А,А2), квадрат(В,В2), квадрат(С,С2), К=А2+В2+С2, L=K-P, P>L.

Программа, решающая данную задачу, может быть такой:

%           БАЗА ЗНАНИЙ "ТРЕУГОЛЬНИКИ"

%        Определение вида треугольника

%        (Используется теорема Пифагора)

/*************♦****♦***************♦♦********♦*******«***/

domains

HMfl=symbol   %"имя" - вершины кандидата в треугольники число=геа1   %"число" - стороны кандидата в треугольники

predicates

кандидат(имя,число,число,число)

макс(число,число,число)

максЗ(число,число,число,число)

треугольник(имя)

прямоугольный(имя)

тупоугольный(имя)

равнобедренный(имя)

остроугольный(имя)

clauses

кандидат(аЬс,3,4,5). кандидат^ет,7,5,11). кандидат(тпр,4,3,8).


%                    Максимум из двух чисел:

%                     max(a,b)=a, при а>=Ь,

%                      max(a,b)=b, при а<Ь.

макс(А,В,А):-А>=В,!. макс(А,В,В).

У*************..***..*******..*...*****......*****.**.***,

%                     Максимум из трех чисел

максЗ(А,В,С,М):макс(А,В,О),макс(О,С,М).

I********************************************************!

% Кандидат в треугольники является треугольником, если % каждая его сторона меньше суммы двух других сторон

треугольник(Имя):кандидат(Имя,А,В,С),максЗ(А,В,С,М),Р=А+В+С,М<Р-М.

прямоугольный(Имя):кандидат(Имя,А,В,С),максЗ(А,В,С,М),

М*М=А*А+В*В+С*С-М*М,!. тупоугольный(Имя):кандидат(Имя,А,В,С),треугольник(Имя),максЗ(А,В,С,М),

М*М>А*А+В*В+С*С-М*М,!. равнобедренный(Имя):кандидат(Имя,А,В,С),А=В;

кандидат(Имя,А,В,С),А=С;

кандидат(Имя,А,В,С),В=С,!. остроугольный(Имя):кандидат(Имя,А,В,С),треугольник(Имя),максЗ(А,В,С,М),

М*М<А*А+В*В+С*С-М*М,!.

4.4. Задачииупражнения

1. Написать правило для вычисления:

а) арифметического корня четвертой степени;


б; вычисление площади треугольника по заданным сторонам и углу между ними.

2 Написать программу на Прологе, реализующую размен денег купюрами по 5, 3 и 1 рублю с учетом количества купюр разного достоинства.

3.  Написать программу на Прологе для вычисления времени прибытия самолета в пункт назначения, если известно время вылета и время нахождения в пути. Все времена даны в ча сах и минутах московского времени. При решении следует учесть возможность перехода в следующие сутки.

4.  Написать правило для определения остроугольного треугольника.

5  Почему в правиле для прямоугольного треугольника отсутст вовала, а для тупоугольного - присутствует проверка того, что это треугольник?

6  Доказать, что для остроугольного треугольника можно также •         не проводить проверку «на треугольник».

ОТВЕТЫ И РЕШЕНИЯ

1 a) KopeHb4(X,X4):-X4=sqrt(sqrt(X)). б)площадь(Стор1,Стор2,Угол,Площадь)> Площадь=Стор1 *Стор2*з1п(Угол)/2 2.Программа может быть такой: /*         "Размен денежных сумм"                   */


domains

4Hcno=integer

список=число*

predicates

размен2(число,число,число,число, список) размен2

разность (число,число,число) конкат (список,список,список)

clauses

размен2>

makewindow (1,15,15,"Размен денег",0,0,25,40), write ("Введите сумму:"),nl.readint (ИсхСумма),п1, write ("Введите количество py6neu:"),nl,readint (Kyn1p),nl, write ("Введите количество трешек:"),nl.readint (Kyn3p),nl, write ("Введите количество пятерок"),nl.readint (Kyn5p),nl, размен2 (ИсхСумма,Куп5р,КупЗр,Куп1р,СписРазм), write ("Получите: ",CnncPa3M),readchar(_).

%Если вся сумма выдана, размен кончается размен2 (0,_,_,_,[]).

%Выдача пяти рублей

размен2 (ИсхСумма,Куп5р,КупЗр,Куп1р,СписРазмена) -   . ИсхС,умма>4,Куп5р>0,разность (Куп5р,1 ,Ост5р), разность(ИсхСумма,5,ОстРазменять), конкат([5],СписРазменаОстатка,СписРазмена), размен2(ОстРаз1^юнять,Ост5р,КупЗр,Куп1р,СписРазменаОстатка).

у****************************.********************.************/

%Выдача трех рублей

размен2 (ИсхСумма,Куп5р,КупЗр,Куп1р,СписРазмена)> ИсхСумма>2,КупЗр>0,разность (КупЗр,1,ОстЗр), разность (ИсхСумма,3,ОстРазменять), конкат([3],СписРазменаОстатка,СписРазмена),