Помощь в написании студенческих работ
Антистрессовый сервис

Рекурсивные подпрограммы. 
Основы алгоритмизации и программирования

РефератПомощь в написанииУзнать стоимостьмоей работы

В секции реализации описываются подпрограммы, заголовки которых приведены в интерфейсной части. Заголовок подпрограммы должен быть или идентичным указанному в секции интерфейса, или состоять только из ключевого слова procedure или function и имени подпрограммы. Для функции также указывается ее тип. В стеке отводится место под параметр п, ему присваивается значение 3, и начинается выполнение… Читать ещё >

Рекурсивные подпрограммы. Основы алгоритмизации и программирования (реферат, курсовая, диплом, контрольная)

Рекурсивной называется подпрограмма, в которой содержится обращение к самой себе. Такая рекурсия называется прямой. Есть также косвенная рекурсия, когда две или более подпрограмм вызывают друг друга.

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

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

Простой пример рекурсивной функции — вычисление факториала. Чтобы получить значение факториала числа п, требуется умножить на п-факториал числа (п -1). Известно также, что 0! = 1 и 1! = 1. function fact (n: byte): longint; begin.

if (n = 0) or (n = 1) then fact:= 1 else fact:= n * fact (n — 1); end;

Рассмотрим, что происходит при вызове этой функции при п = 3.

В стеке отводится место под параметр п, ему присваивается значение 3, и начинается выполнение функции. Условие в операторе if ложно, поэтому управление передается на ветвь else. Для вычисления выражения п • fact (п — 1) требуется повторно вызвать функцию fact.

Для этого в стеке отводится новое место под параметр п, ему присваивается значение 2, и выполнение функции начинается сначала. В третий раз функция вызывается со значением параметра, равным 1, и вот тут-то становится истинным выражение (п = 0) or (n = 1), поэтому происходит возврат из подпрограммы в точку вызова, т. е. на выражение п • fact (п — 1) для п = 2. Результат выражения присваивается имени функции и передается в точку ее вызова, т. е. в то же выражение, только теперь происходит обращение к параметру п, равному 3.

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

Модуль — это подключаемая к про- 1У10^.

грамме библиотека ресурсов. Он может ;

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

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

Использование модулей позволяет преодолеть ограничение в один сегмент на объем кода исполняемой программы, поскольку код каждого подключаемого к программе модуля содержится в отдельном сегменте.

Модули можно разделить на стандартные, которые входят в состав системы программирования, и пользовательские, т. е. создаваемые программистом. Чтобы подключить модуль к программе, его требуется предварительно скомпилировать. Результат компиляции каждого модуля хранится на диске в отдельном файле с расширением. tpu.

Описание модулей Исходный текст каждого модуля хра;

— нится в отдельном файле с расширением.

.pas. Общая структура модуля:

unit имя; {заголовок модуля}.

interface {интерфейсная секция модуля}.

{описание глобальных элементов модуля (видимых извне)}.

implementation {секция реализации модуля}.

{описание локальных (внутренних) элементов модуля}.

begin {секция инициализации}.

{может отсутствовать} end.

ВНИМАНИЕ Имя файла, в котором хранится модуль, должно совпадать с именем, заданным после ключевого слова unit.

Модуль может использовать другие модули, для этого их надо перечислить в операторе uses, который может находиться только непосредственно после ключевых слов interface или implementation.

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

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

Кроме того, в этой секции можно определять константы, типы данных, переменные и внутренние подпрограммы.

Секция инициализации предназначена для присваивания начальных значений переменным, которые используются в модуле.

Операторы, расположенные в секции инициализации модуля, выполняются перед операторами основной программы.

Для сохранения скомпилированного модуля на диске требуется установить значение пункта Destination меню Compile в значение Disk. Компилятор создаст файл с расширением. tpu.

Пример Оформим в виде модуля подпрограмму вычисления среднего арифметического значения элементов массива, unit Avrg; interface const n = 10;

type mas = array [1. n] of real; procedure average (x: mas; var av: real); implementation.

procedure average (x: mas; var av: real);

var i: integer; begin av:= 0;

for i:= 1 to n do av:= av + x [i]; av:= av / n; end; end.

Дга использования в программе вели- Использование модулей

чин, описанных в интерфейсной части ;

модуля, имя модуля указывается в разделе uses. Можно записать несколько имен модулей через запятую, например: program example; uses Avrg, Graph, Crt;

Поиск модулей выполняется сначала в библиотеке исполняющей системы, затем в текущем каталоге, а после этого — в каталогах, заданных в диалоговом окне Options/Directories.

Если в программе описана величина с тем же именем, что и в модуле, то для обращения к величине из модуля требуется перед ее именем указать через точку имя модуля.

Показать весь текст
Заполнить форму текущей работой