Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Programmirovanie_1_Kurs_1_Sem_Anosov_Yu...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Var X : integer;

Begin

Write(s);

Readln(x);

Vvod:=x;

End;

Изменённый вызов в главной части программы:

a:=Vvod('Введите первую границу. a=');

b:=Vvod('Введите вторую границу. b=');

Теперь диалог с пользователем примет более естественный вид:

4.7 Лабораторная работа №7 «Рекурсия и рекурсивные функции в языке Паскаль»

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

Темы, которые необходимо знать для выполнения и защиты данной работы:

  • Понятие рекурсии.

  • Условие остановки рекурсии.

  • Способы организации рекурсивных вычислений при помощи рекурсивных функций в языке Паскаль.

  • Явная и не явная рекурсия.

  • Особенности использования памяти при рекурсивных вычислениях

Выполнение данной работы должно проходить в 5 этапов:

  1. Этап первый. Предварительный анализ предметной области задачи.

  2. Этап второй. Разработка программы, реализующей вычисления при помощи простой не рекурсивной функции.

  3. Этап третий. Разработка математической модели рекурсивного вычисления.

  4. Этап четвёртый. Разработка и добавление в программу рекурсивной функции, выполняющей те же действия.

  5. Этап пятый. Тестирование и доработка программы, если это необходимо.

Общие требования к работе (минимальный уровень, оценка «удовлетворительно»):

  • Определить в программе необходимые переменные.

  • Организовать ввод исходных данных с клавиатуры.

  • Разработать программу реализующей вычисления при помощи простой не рекурсивной функции.

  • Вывести результат работы программы на экран.

  • Разработать модель рекурсивного вычисления.

Для защиты на оценку «хорошо»:

  • Разработать и добавить в программу рекурсивную функцию.

  • Вывести на экран результат вычисления обычной и рекурсивной функциями.

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

Для защиты на оценку «отлично»:

  • Встроить в обе функции механизм подсчёта числа итераций. Результат подсчёта вернуть при помощи параметров-переменных.

  • Протестировать и оптимизировать программу.

Варианты заданий на лабораторную работу № 7.

Вариант

Задание

1

Найти сумму квадратов всех ЧЕТНЫХ чисел, расположенных между двумя указанными числами, включая указанные числа, если они являются чётными.

2

Найти произведение всех НЕЧЕТНЫХ чисел, расположенных между двумя указанными числами, включая указанные числа, если они являются нечётными.

3

Задана текстовая строка. Написать рекурсивную функцию, которая формирует новую строку, в которой текст перевёрнут в обратном порядке.

4

Написать рекурсивную функцию вычисления чисел Фибоначчи, от нуля до заданного числа N.

fib(0)=0; fib(1)=1; fib(n)=fib(n-1) + fib(n-2); При этом: fib(0)=0; fib(1)=1;

5

Задано положительное число N. Вычислить при помощи рекурсивной функции значение выражения:

6

Задано положительное число n. Вычислить при помощи рекурсивной функции значение выражения:

7

Задано два целых числа N и K.

Написать рекурсивную функцию F(x), позволяющую вычислить

Следующим образом: , где:

8

Написать рекурсивную функцию, печатающую на экране все целые делители заданного целого числа N.

9

Задана текстовая строка и некоторый символ. Подсчитать сколько раз данный символ встречается в указанной строке при помощи рекурсии.

10

Заданы 2 числа X и Y. Вычислить S=X + X/2 + X/4 + X/8 + … Вычисление производить до тех пор, пока слагаемые больше числа Y. X/n2 >Y

11

Заданы 2 числа X и Y. Определить, сколько раз можно поделить число X на число Y, что б результат по-прежнему оставался больше единицы. X/Y/Y/Y/Y… > 1

12

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

13

Заданы 2 числа X(любое) и Y(целое).

Вычислить S=XY при помощи рекурсии.

14

Заданы два числа X(любое) и N(целое).

Вычислить sin(sin(sin(…sin(X)…))) N раз, при помощи рекурсии.

15

Заданы два числа X(любое) и N(целое). X – это процент годовых. N – это число лет, на которые положен вклад. Определить, во сколько раз вырастет вклад за заданное число лет, и полученную сумму в конце срока.

Пример решения типовой задачи лабораторной работы № 7.

Рассмотрим решение поставленной в седьмой лабораторной работе задачи на примере следующего варианта задания:

Написать программу, находящую и выводящую на экран все числа, которые определяются следующим образом:

  • x1 = 0.

  • x2 = 1.

  • xn = (x(n-2) + x(n-1)) / 2. Т.е. среднее арифметическое двух предыдущих чисел.

Вычисления производить до тех пор, пока сумма всех найденных чисел меньше действительного числа «R», введённого пользователем.

Число «R» должно быть больше, либо равно числу «1».

Вычисления произвести сначала при помощи простой функции, затем при помощи рекурсивной функции.

Дополнительно подсчитать число итераций в простой функции и число произведённых вызовов рекурсивной функции.

Этап первый. Предварительный анализ предметной области задачи.

По условию задачи нам необходимо производить вычисления, содержащие операцию деления. Т.е. в процессе вычисления мы будем получать действительные числа. Следовательно, данные, используемые в вычислениях, должны иметь тип «real».

Соответственно, результат суммирования действительных чисел – также будет являться действительным числом, и должен иметь тип «real».

Граница вычислений (по условию задачи) также является действительным числом. Т.е. также должна иметь тип «real».

При вычислении каждого нового числа «xn» по формуле, заданной в условии задачи, нам необходимо иметь два предыдущих числа: «x(n-2)» и «x(n-1)». Т.е. переменных, хранящих текущие значения основных параметров вычисления потребуется три.

Следовательно, для реализации базовой части программы (т.е. указанных в условии задачи вычислений), нам необходимо описать в программе 5 переменных действительного типа «real».

Обозначим: - «x(n-2)» и «x(n-1) , как «X1» и «X2».

- новое вычисляемое значение, как «Xn».

- сумму найденных чисел, как «S».

- границу вычислений, как «R».