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

129

11. Подпрограммы

Подпрограмма – средство представления вспомогательного алгоритма на языке программирования.

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

С

<Заголовок подпрограммы>;

<Раздел указания используемых модулей>

<Раздел деклараций>

< Секция объявления локальных констант>

< Секция объявления локальных типов>

< Секция объявления локальных переменных>

< Секция объявления внутренних процедур и функций>

begin

<Операторы, описывающие алгоритм>

end;

труктура подпрограммы имеет следующий вид

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

С

function <имя> (<список формальных параметров>):<тип результата>;

{Вызов функции может выполняться там, где допускается

записывать выражение, в частности, в правой части оператора

присваивания или в списке вывода.

Например: Sum := Summa(Vector);

Writeln(’Сумма элементов = ’, Sum(Vector));}

procedure <имя> (<список формальных параметров>);

{Вызов процедуры выполняется отдельным оператором.

Например: Summa(n, Vector); }

труктура заголовка программы приведена ниже

П

function <имя>:<тип результата>;

procedure <имя>;

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

11.1. Область действия идентификаторов

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

Область действия идентификаторов определяется местом их объявления. Если идентификаторы можно использовать только в пределах одной подпрограммы, то какие идентификаторы называются локальными. Если же действие идентификатора распространяется на несколько вложенных (не менее одной) подпрограмм, то такие идентификаторы называются глобальными.

Отметим, что понятия «глобальные» и «локальные» следует понимать относительно – по отношению к конкретной подпрограмме.

П

Program Scope;

var A0, B0, C0 : integer;

procedure P1;

var A1, B1, C1 : integer;

procedure P2;

var A2, B2, C2 : integer;

begin

Допустимо использование

как глобальных A0, B0, C0, A1, B1, C1,

так и локальных A2, B2, C2

end; {procedure P2}

begin

Допустимо использование

как глобальных A0, B0, C0,

так и локальных A1, B1, C1

end; {procedure P1}

begin

Допустимо использование только A0, B0, C0,

end.

родемонстрируем сказанное на примере. Пусть программа имеет следующую структуру:

В данном примере

  • A0, B0, C0 будут глобальными для всех подпрограмм, используемых в программе;

  • A1, B1, C1 будут глобальными для всех подпрограмм, описанных внутри процедуры P1 (в данном примере для процедуры P2), и одновременно локальными для самой процедуры P1;

  • A2, B2, C2 – видимы (локальны) только в процедуре P2.

Сформулируем правила определения области действия для идентификаторов подпрограмм (процедур и функций):

  • действуют все идентификаторы, определенные внутри подпрограммы;

  • действуют все идентификаторы окружающего контекста, если имена отличаются от имен, объявленных внутри подпрограммы;

  • локальные идентификаторы подпрограммы во внешнем окружении действовать не будут никогда;

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

Примечание. Локальные данные создаются при вызове подпрограммы и существуют только во время ее выполнения. Выделение памяти для локальных данных происходит автоматически в начале выполнения подпрограммы, а освобождение этой памяти – как только выполнение подпрограммы заканчивается. Следствие этого: значения локальных данных существуют, пока подпрограмма выполняется. Как только она завершается, все изменения значений локальных данных, сделанные операторами подпрограммы, исчезнут вместе с освобождением памяти.

Соседние файлы в папке лекции