
- •Учебно-методическое пособие по изучению теоретического материала и самостоятельному выполнению лабораторных заданий
- •1. Введение
- •2. Общие методические рекомендации по изучению курса
- •3. Методические рекомендации по изучению теоретического материала курса
- •3.1 Содержание разделов дисциплины
- •Тема 1. «Структура программы на языке «Паскаль». Основные типы данных. Правила записи имён в языке Паскаль. Линейные вычислительные процессы.»
- •Тема 2. «Базовые конструкции языка «Паскаль». Ветвящиеся вычислительные процессы.»
- •Тема 3. «Одномерные и многомерные массивы. Циклические вычислительные процессы.»
- •Тема 4. «Обработка символьной информации»
- •Тема 5. «Процедуры в языке Паскаль»
- •Тема 6. «Функции в языке Паскаль»
- •Тема 7. Рекурсивные функции. Явная и неявная рекурсия.
- •Тема 8. Многомодульные приложения (дополнительная тема).
- •4. Методические рекомендации по выполнению лабораторных работ
- •4.1 Лабораторная работа №1 «Структура программ на языке Паскаль, основные типы данных, основные операции, линейные вычислительные процессы»
- •Варианты заданий на лабораторную работу № 1.
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •Var a,b,c,r : real;
- •4.2 Лабораторная работа №2 «Условные операторы. Правила записи условий простые и сложные условия, ветвящиеся вычислительные процессы»
- •Варианты заданий на лабораторную работу № 2.
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •Var a,b,X : real;
- •4.3 Лабораторная работа №3 «Массивы и циклы в языке Паскаль»
- •Варианты заданий на лабораторную работу № 3.
- •4.4 Лабораторная работа №4 «Обработка символьной и строковой информации в языке Паскаль»
- •Варианты заданий на лабораторную работу № 4.
- •4.5 Лабораторная работа №5 «Процедуры в языке Паскаль»
- •Варианты заданий на лабораторную работу № 5.
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var a,b : integer; // Числа, вводимые пользователем
- •I : integer; // Счётчик цикла
- •Var X : integer;
- •Var I : integer; // Счётчик цикла
- •4.6 Лабораторная работа №6 «Функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 6.
- •Пример решения типовой задачи лабораторной работы № 6.
- •Var I : integer; // Счётчик цикла
- •Var X : integer;
- •Var X : integer;
- •В результате внесённых изменений наша программа примет следующий вид:
- •Var X : integer;
- •Результат работы этой программы представлен на следующем рисунке:
- •Var X : integer;
- •4.7 Лабораторная работа №7 «Рекурсия и рекурсивные функции в языке Паскаль»
- •Варианты заданий на лабораторную работу № 7.
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var x1, x2, Xn : real; // Вычисляемые числа
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var x1, x2, Xn : real ; // Вычисляемые числа
- •I : integer; // Число итераций цикла
- •Var r : real ; // Граница вычислений, вводимая пользователем
- •Var Xn : real; // Вычисляемые числа
- •Var Xn : real; // Вычисляемые числа
- •5. Вопросы для подготовки к зачёту
- •6. Список рекомендуемой литературы
- •7. Программное обеспечение и Интернет-ресурсы
Var X : integer;
Begin
Write(s);
Readln(x);
Vvod:=x;
End;
Изменённый вызов в главной части программы:
a:=Vvod('Введите первую границу. a=');
b:=Vvod('Введите вторую границу. b=');
Теперь диалог с пользователем примет более естественный вид:
4.7 Лабораторная работа №7 «Рекурсия и рекурсивные функции в языке Паскаль»
При выполнении данной работы требуется написать и отладить программу, содержащую рекурсивную функцию, предназначенную для выполнения некоторых вычислительных действий согласно варианту задания. Ввод данных и печать результатов должен быть организован при помощи процедур.
Темы, которые необходимо знать для выполнения и защиты данной работы:
Понятие рекурсии.
Условие остановки рекурсии.
Способы организации рекурсивных вычислений при помощи рекурсивных функций в языке Паскаль.
Явная и не явная рекурсия.
Особенности использования памяти при рекурсивных вычислениях
Выполнение данной работы должно проходить в 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.
Рассмотрим решение поставленной в седьмой лабораторной работе задачи на примере следующего варианта задания:
Написать программу, находящую и выводящую на экран все числа, которые определяются следующим образом:
Вычисления производить до тех пор, пока сумма всех найденных чисел меньше действительного числа «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».