Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование на паскале2.doc
Скачиваний:
144
Добавлен:
31.03.2015
Размер:
935.94 Кб
Скачать

Часть.Подпрограммы

2.1. Общие сведения о подпрограммах

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

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

Главным вопросом, который следует решить при проектировании подпрограмм, является вопрос о способе передачи данных между подпрограммой и программой. В любом алгоритмическом языке существует два основных способа передачи данных:через список параметров подпрограммыичерез глобальные переменные(общие области, внешние имена). Первый способ дает возможность подстановки, т. е. передачи в подпрограмму при каждом обращении к ней новых данных программы. В список параметров подпрограммы включаются переменные, значения которых должны быть переданы из программы в подпрограмму и из подпрограммы в программу (т.е. "вход" и "выход"15подпрограммы).

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

Существует два способа замены формальных параметров на фактические:" по ссылке"17(call-by-reference) и "по значению" (call-by-value). Передача параметра "по ссылке" означает передачу в подпрограмму адреса фактического параметра. При этом любое изменение формального параметра внутри подпрограммы есть изменение соответствующего фактического параметра. Поэтому константы и выражения нельзя передавать "по ссылке" - они могут измениться, «испортиться». Передача параметров "по значению" означает пересылку значения фактического параметра в ячейку, соответствующую формальному параметру, при обращении к подпрограмме. Это обеспечивает сохранность величины фактического параметра. Изменение формального параметра внутри подпрограммы никак не отражается на значении фактического.

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

Заметим, что при передаче "по ссылке", как правило, экономится память, так как формальные параметры не копируют фактические; по этой причине массивы обычно передаются "по ссылке". При передаче "по значению" обычно экономится время работы подпрограммы (за счет отсутствия переадресации при обращении к формальным параметрам).

В большинстве алгоритмических языков имеется два вида подпрограмм: подпрограммы общего назначения (в паскале они называются процедурами) и функции. Функции следует использовать, если подпрограмма имеет одно выходное значение (или одно основное выходное значение); классическими примерами функций во всех алгоритмических языках являются стандартные математические функции: синус, косинус, абсолютная величина и т. д. Имя функции является не только именем ее алгоритма, но и именем результата; это имя можно использовать в выражениях (как sin,cos,abs, и т. д.) Говорят, что функция через свое имя возвращает единственный (или основной) результат.