Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
70
Добавлен:
18.05.2015
Размер:
192.51 Кб
Скачать

1.7. Рекурсивные подпрограммы

Слово рекурсия происходит от латинского слова «recursio» – возвращение.

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

Известными рекурсивными подпрограммами являются вычисление факториала , решение задачи о Ханойских башнях, быстрая сортировка К.Хоара, подпрограммы работы с динамическими структурами данных, подпрограммы построения фракталов и многие другие.

Главные требования к организации рекурсивной подпрограммы следующие:

  • рекурсивная подпрограмма имеет хотя бы один параметр

  • рекурсивная подпрограмма всегда содержит условие завершения рекурсии и, если это условие не выполняется, подпрограмма вызывает сама себя с изменением значения параметра.

2. Модули

Д. Парнас (David Parnas) определил модуль как программный объект с собственной моделью данных и собственным набором операций. Доступ к данным модуля возможен только через имеющиеся в нем операции.

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

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

«Сокрытием информации (information hiding) называют приемы, благодаря которым одни программы маскируют информацию, получаемую из других программ. Программа может скрывать детали реализации, такие как алгоритмы и данные, благодаря чему, в случае, если их необходимо изменить, другие программы, от них зависящие, не придется переписывать. Программы, скрывающие информацию, взаимодействуют друг с другом через общедоступные интерфейсы. Главное достоинство сокрытия информации заключается в увеличении независимости программ друг от друга» [David Parnas, «On the Criteria to Be Used in Decomposing Systems into Modules»].

Достоинством информационной закрытости является возможность осуществить:

  • Независимую разработку программных средств несколькими программистами

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

Главные части модуля – интерфейс и реализация

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

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

Формат подключения модулей:

uses <список имен модулей>;

Структура модуля в языке Pascal:

unit <имя модуля>;

Interface {интерфейс модуля}

uses {подключение других модулей}

const type var

procedure function

Implementation {реализация }

uses const type var

procedure function

begin {инициализация }

<операторы> {исполняются один раз перед выполнением }

{операторов программы, включающей модуль }

end.

Пример использования модуля:

Рассмотрим программу, которая включает модуль Math, содержащий функцию power(a,b) возведения числа a в произвольную степень b и функцию log(c) вычисления десятичного логарифма числа c.

Исходный текст модуля сохраняем в файле Math.pas:

unit Math;

interface

function power( base, exponent: real): real;

function log ( argument : real): real;

implementation

function power( base, exponent: real): real;

begin

power:= exp( exponent * ln(base));

end;

function log ( argument : real): real;

const base=10; begin

log:= ln(argument) / ln(base);

end;

end.

После его успешной компиляции создается файл Math.tpu (расширение

tpu Turbo Pascal Unit). Разместим этот файл в том же каталоге, что и текст программы ex_Math.

program ex_Math;

uses Math; {подключение модуля Math}

var

a, b, c: real;

begin

readln(a, b, c);

writeln('A в степени B = ', power(a, b)); writeln('Логарифм C по основанию 10 = ', log(C)); end.