Практическая информатика




Примеры программ - часть 2


No

?- гипотенуза(3,X,5). No

Пример

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

Воспользуемся процедурой гипотенуза/3, разобранной выше, и встроенной функцией min/2:

мин_гип(A1,B1,A2,B2,Min):- гипотенуза(A1,B1,C1), гипотенуза(A2,B2,C2), Min is min(C1,C2).

Запросы к интерпретатору Пролога могут выглядеть так:

?- мин_гип(3,4,8,6,X). X = 5 Yes

?- мин_гип(3,4,Y,6,X). No

Пример

Факториалом натурального числа n называют произведение всех целых чисел от 1 до n включительно. Для записи факториала числа n используют обозначение n!.

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

Следующая процедура вычисляет факториал числа. Обратите внимание на использование рекурсии в данной процедуре:

факториал(1,1). факториал(N,R):- integer(N), N>1, N1 is N-1, факториал(N1,R1), R is N*R1.

Первое правило (так называемый терминальный случай, то есть тот момент выполнения процедуры, когда она перестает вызывать сама себя) гласит, что факториал единицы равен единице. Второе правило есть просто запись определения факториала: результат R получается умножением числа N на факториал числа, на единицу меньшего. Оно будет срабатывать при всех n>1 потому, что интерпретатор Пролога просматривает базу данных сверху вниз и переходит к следующему правилу или факту только в том случае, когда он не может выполнить текущее правило.

Пример

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

Для решения данной задачи воспользуемся двумя предикатами. Предикат сумма/2 имеет своим первым аргументом число, сумма цифр которого является его вторым аргументом. Второй предикат - печать_суммы/0- запрашивает число, вызывает предикат сумма/2 и печатает полученный результат.

сумма(X,Y):- integer(X), X<10, Y is X. сумма(X,Y):- integer(X), X1 is X//10, сумма(X1,Y1), Z is X mod 10, Y is Y1+Z.

печать_суммы:- write('Введите число (в конце точка): '), read(X), nl, сумма(X,Y), write('Сумма цифр числа '), write(X), write(' равна '), write(Y), nl.




Содержание  Назад  Вперед