Описание подпрограммы состоит из заголовка и тела подпрограммы.
Структура описания процедуры имеет вид:
Procedure <имя> (<список формальных параметров>);
Label { Описание локальных меток,}
Const { констант,}
Type { типов и}
Var { переменных}
Procedure { Описание внутренних процедур }
Function { и функций}
Begin {Операторы}
End;
Структура описания функции имеет вид:
Function <имя>(<список формальных параметров>):<тип рез-та>;
Label { Описание локальных меток,}
Const {констант, }
Type {типов и }
Var { переменных}
Procedure { Описание внутренних процедур и
Function { функций}
Begin {Операторы, среди которых должен быть хотя бы один,}
End; {который присваивает имени функции значение результата}
Пример 1. Дан одномерный массив размерностью n, элементами которого являются действительные числа. Найти сумму элементов вектора.
{Решение задачи с помощью процедуры}
Const n = 10;
Type Vector = Array [1..n] of Real;
Var a: Vector; i: Integer;
Procedure Summa(vec: Vector; len: Integer);
Var i: Integer; s: Real;
Begin
S := 0;
For I := 1 to len do S := S + vec[i];
Writeln(‘Сумма =’, S:7:2);
End;
Begin
Writeln(‘Введите элементы массива’);
For i := 1 to n do read(a[i]); Readln;
Summa(a, n);
Readln;
End.
{Решение задачи с помощью функции}
Const n = 10;
Type Vector = Array [1..n] of Real;
Var a: Vector; i: Integer; Sum: Real;
Function Summa(vec: Vector; len: Integer): Real;
Var i: Integer; s: Real;
Begin
S := 0;
For I := 1 to len do S := S + vec[i];
Summa := s;
End;
Begin
Writeln(‘Введите элементы массива’);
For i := 1 to n do read(a[i]); Readln;
Sum:= Summa(a, n);
Writeln(‘Сумма =’, Sum:7:2);
Readln;
End.
Область действия идентификаторов констант, переменных, типов, меток, вложенных подпрограмм определяется местом их объявления. Если идентификаторы допускается использовать только в рамках одной подпрограммы, то такие идентификаторы называются локальными. Если действие идентификаторов распространяется на несколько вложенных подпрограмм, то такие идентификаторы называются глобальными. Понятия «глобальные» и «локальные» следует понимать относительно – по отношению к конкретной процедуре или функции.
Продемонстрируем это следующим примером.
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;
Begin
{ допустимо использование как глобальных a0, b0, c0, так и локальных a1, b1, c1}
End;
Begin
{ допустимо использование только a0, b0, c0}
End.
Локальные данные создаются при вызове подпрограммы и существуют только во время ее выполнения. Выделение памяти для локальных данных происходит автоматически в начале выполнения подпрограммы, а освобождение этой памяти – как только выполнение подпрограммы заканчивается.
Правила определения области действия для идентификаторов подпрограмм:
· действуют все идентификаторы, определенные внутри подпрограммы;
· действуют все идентификаторы окружающего контекста, если их имена отличаются от имен, объявленных внутри подпрограммы;
· локальные идентификаторы подпрограммы во внешнем окружении действовать не будут никогда;
· в случае совпадения имен глобального и локального идентификаторов действовать будет только внутренний локальный идентификатор.