Задания для самостоятельной работы

№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.