
- •Лекция 7 Подпрограммы, модули, файлы
- •1. Подпрограммы
- •1.1 Глобальные данные
- •1.4 Процедуры
- •1.5. Передача массивов в качестве параметров
- •1.5.1. Формальные параметры как массивы с фиксированными размерами
- •Var {main – главная программа }
- •1.5.2. Формальные параметры как массивы со «свободными» размерами
- •1.6. Передача подпрограммы как параметра
- •1.7. Рекурсивные подпрограммы
- •2. Модули
- •Interface {интерфейс модуля}
- •Implementation {реализация }
- •3. Файлы. Основные понятия и операции
- •3.1. Последовательный доступ к компонентам файла
- •3.2. Типизированные файлы
- •Стандартные процедуры и функции работы с типизированными файлами
- •3.3. Текстовые файлы
- •Процедуры и функции работы с текстовыми файлами
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.