Лабораторная работа
Prolog. Рекурсия
Категория: | Лабораторная работа |
Дисциплина: | Функциональное и логическое программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #PROLOG |
Стоимость работы: | 8 руб. |
Оценка: | 10 |
Объем страниц: | 8 |
Год сдачи: | 2021 |
Дата публикации: | 24.12.2021 |
Фрагменты для ознакомления
Отчет по лабораторной работе № 4
дисциплина: «Функциональное и логическое программирование»
РЕКУРСИЯ
Цель работы: приобретение практических навыков составления и отладки программ с использованием рекурсии.
Постановка задачи:
Используя рекурсию, запрограммировать решение задач.
Задание:
Возвести вещественное число a в целую степень n (степень n может быть положительной, нулевой или отрицательной).
Составить два варианта программы:
а) используя рекурсивное выражение a^n=a^(n-1) * a;
б) используя проверку четности степени: для нечетной степени, используется рекурсивное выражение варианта а), для четной степени - a^n = a^(n/2) * a^(n/2).
Используя рекурсию, запрограммировать решение следующих задач:
4.1. Найти сумму целых последовательных чисел в интервале от М до N (M<=N).
4.2. Просуммировать целые последовательные нечетные числа, т.е. 1+3+5+7+…, от 1 до N (учесть, что при вводе значения N оно может быть четным).
4.3. Вычислить значения следующих функций, используя разложение в ряд. Разработать два варианта программы – рекурсивный и итеративный, в итеративном варианте задавать точность вычисления функции. Полученный результат сверить со значением соответствующей стандартной функции для вычисляемого аргумента
h) | sin(x) = x – x^3/3! + x^5/5! - … + (-1)^(m-1)*x^(2*m-1)/(2*m-1)! + … (m=1,2,3,…) |
Код программы 4 a):
domains
n=integer
a,f=real
predicates
nondeterm степень(a,n,f)
nondeterm результат
clauses
степень(_,0,1.0).
степень(A,N,F):-
N>0,
N1=N-1,
степень(A,N1,F1),
F=F1*A.
степень(A,N,F):-
N<0,
N1=-N,
степень(A,N1,F1),
F=1/F1.
результат:-
write("Введите число необходимое возвести в степень:"),nl,
write("А="), readreal(A),
write("Введите степень:"),nl,
write("N="), readint(N),
степень(A,N,F),
write("(",A,")^(",N,")=",F),nl.
goal
результат.
Скриншоты результатов:

Код программы 4 b):
domains
n=integer
a,f=real
predicates
nondeterm степень(a,n,f)
nondeterm результат
clauses
степень(_,0,1.0).
степень(A,N,F):-
N>0,
N mod 2=1,
N1=N-1,
…
Код программы 4.1:
Код программы 4.2:
Код программы 4.3.1 (h):
Код программы 4.3.2 (h).:
Контрольные вопросы:
1. Что такое рекурсия?
Определение некоторого отношения через самого себя.
2. Основная цель использования рекурсии в программах Visual Prolog.
Программирование циклических процессов.
3. Назначение граничного условия в рекурсивном правиле.
Остановка рекурсивного процесса.
4. Принцип построения граничного условия.
В граничном условии указывается значение начальной переменной и соответствующие ей значение искомой переменной.
Математическая запись | Запись на Prolog |
Граничное условие | |
S0=0 | sum(0,0). |
5. Может ли быть в рекурсивном правиле более одного граничного условия?
Может.
6. Как программируются разветвления в программах Visual Prolog?
Главный способ реализации разветвлений в Пролог-программе – обращение к некоторому предикату(правилу), который реализуется с проверкой заданных условий.
7. Левосторонняя (нисходящая) и правосторонняя (восходящая) рекурсии.
8. Принципиальная разница между рекурсивной и итеративной процедурами.
9. Правила сопоставимости двух термов.
10. Поиск с возвратом в программах Visual Prolog.
11. Поточный шаблон предиката.
12. Стандартные предикаты ввода-вывода Visual Prolog.
Вывод: приобрели практических навыков составления и отладки программ с использованием рекурсии.
658
2