Лабораторная работа

Prolog. Рекурсия

Категория:

Лабораторная работа

Дисциплина:

Функциональное и логическое программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

6 руб.

Оценка: 10
Объем страниц: 8
Год сдачи: 2021
Дата публикации: 09.06.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=0sum(0,0).

 

5. Может ли быть в рекурсивном правиле более одного граничного условия?

 Может.

 

6. Как программируются разветвления в программах Visual Prolog?

Главный способ реализации разветвлений в Пролог-программе – обращение к некоторому предикату(правилу), который реализуется с проверкой заданных условий.

 

7. Левосторонняя (нисходящая) и правосторонняя (восходящая) рекурсии.

8. Принципиальная разница между рекурсивной и итеративной процедурами.

9. Правила сопоставимости двух термов.  

10. Поиск с возвратом в программах Visual Prolog.

11. Поточный шаблон предиката.

12. Стандартные предикаты ввода-вывода Visual Prolog.

Вывод: приобрели практических навыков составления и отладки программ с использованием рекурсии.

57