№1. Описать предикаты:
1) Найти квадрат числа X; куб числа X.
2) Найти значение функций у = а*х + b, где a, b и х — целые числа.
3) Найти периметр треугольника, если все его стороны известны.
4) Найти площадь прямоугольного треугольника по двум его катетам.
5) Найти площадь трапеции с основаниями А и В и высотой Н.
6) Найти квадрат гипотенузы в прямоугольном треугольнике по двум его катетам.
7) Найти объем прямоугольного параллелепипеда со сторонами А, В и С.
8) Зная скорость V и время Т, определите путь.
9) Найти последнюю цифру в записи натурального числа.
10) Найти цифры в десятичной записи двузначного натурального числа.
11) Найти первую цифру в десятичной записи трехзначного натурального числа.
12) Найти сумму цифр в десятичной записи трехзначного натурального числа.
№2.
1) Найти
А. Наименьшее значение из двух чисел;
Б. Наименьшее значение из трех чисел на основе первой задачи;
В. Наименьшее значение из шести чисел на основе второй задачи.
2) Определить, удовлетворяют ли длины трех отрезков условию прямоугольного треугольника.
|
|
3) Определить, удовлетворяют ли длины трех отрезков условию треугольника.
4) Найти модуль числа X.
5) Описать предикат для вычисления функции, заданной соотношением:
Рекомендуемая литература
1. Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с англ.-М.:Мир, 1993.-608 с.,ил.
2. Информатика. Задачник-практикум в 2 т./Под ред. И.Г.Семакина, Е.К. Хеннера: Том.2.-М.:-БИНОМ. Лаборатория знаний, 2003.-278 с.:ил.
Лабораторная работа №3. Повторение и рекурсия
Пример 1. Выводить на экран квадрат числа, вводимого пользователем, пока не будет введен 0.
Программа 15. Вывод квадрата числа
Domains
x=integer
Predicates
go
repeat
check(x)
Clauses
repeat.
repeat:- repeat.
go:- repeat, write (“Введите число пожалуйста или 0-для выхода ”),
readint(A), check(A).
check(0):-nl,write(“ok”),!.
check(A):-B=A*A, write(B),nl, fail.
Или
go:- repeat, write (“Введите число ”), readint(A),
B=A*A, write(А, “^2= ”,B),nl,
write(“прервать да/нет (y/n) ”), readchar(C), C= “n”,!.
Пример 2. Организовать меню для выбора арифметической операции.
Программа 16. Меню
Domains
x=integer
Predicates
menu
actions(x)
repeat
Clauses
repeat.
repeat:- repeat.
menu:- repeat,
write(“Введите 1 для +, 2 для *, 3-для -, 0-для выхода\n”),
readint(N),
actions(N).
actions(0):-!.
actions(1):-write(“Введите первое число”), nl, readint(A),
write(“Введите второе число”) nl, readint(B),
С=A+B,write(C),nl,fail.
actions(2):- write(“Введите первое число”), nl, readint(A),
write(“Введите второе число”) nl, readint(B),
С=A*B,write(C),nl,fail.
actions(3):- write(“Введите первое число”), nl, readint(A),
write(“Введите второе число”) nl, readint(B),
С=A-B,write(C),nl,fail.
Пример 3. Вычислить n-ый член последовательности Фибоначчи. N-ый член последовательности Фибоначчи, начиная с третьего, определяется суммой 2-х предыдущих, а 1-ый и 2-ой члены равняются единице.
|
|
Введем двуместный предикат fib, первый аргумент будет определять порядковый номер члена, а второй будет записываться для записи ответа. Введем два факта, первый - первый член последовательности Фибоначчи равен 1, второй - второй член последовательности равен 1, а для определения n-го члена запишем правило. Действительно, чтобы определить n-ый член, мы должны определить значения двух предыдущих и сложить их.
fib(1,1).
fib(2,1).
fib(N,F):- N1=N-1, fib(N1,F1), N2=N-2, fib(N2,F2), F=F1+F2.
? fib(1,F)
Ответом будет F=1, и Пролог сделает попытку сопоставить с запросом второй факт и потерпит неудачу. Однако сопоставление головы третьего утверждения с запросом происходит успешно и осуществляется попытка доказать цель fib(-1,F1), что в свою очередь, приводит к цели fib(-2, …)и так далее, т.е. образуется бесконечный цикл. Эту ситуацию можно устранить, используя отсечение и тем самым, указывая Прологу, что не существует других решений в случае успешного согласования граничного условия.
Программа 17. Последовательность Фибоначчи
Domains
x=integer
Predicates
fib(x,x)
Clauses
fib(1,1):-!.
fib(2,1):-!.
fib(N,F):- N1=N-1, fib(N1,F1), N2=N-2, fib(N2,F2), F=F1+F2.