Описание подпрограммы

Объявление процедуры

Объявление функции

Объявление и описание

Подпрограммы объявляются и описываются в начале Pascal-программы, до ключевого слова begin, означающего начало тела программы.

Различия между процедурами и функциями начинаются уже с момента их объявления.

Функции объявляются следующим образом:

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

В отличие от констант и переменных, объявление подпрограммы может быть оторвано от ее описания. В этом случае после объявления нужно указать ключевое слово forward:

function <имя_функции> [(<параметры>)]:<тип_результата>; forward;

Процедуры следует объявлять так:

procedure <имя_процедуры> [(<список_параметров>)];

Если объявление процедуры оторвано от ее описания, нужно поставить после него ключевое слово forward:

procedure <имя_процедуры> [(<список_параметров>)]; forward;

Описание подпрограммы должно идти после ее объявления. Оно осуществляется по следующей схеме (единой для процедур и функций):

[ uses <имена_подключаемых_модулей>;][ label <список_меток>;][ const <имя_константы> = <значение_константы>;][ type <имя_типа> = <определение_типа>;][ var <имя_переменной> : <тип_переменной>;] [ procedure <имя_процедуры> <описание_процедуры>][ function <имя_функции> <описание_функции>;] begin {начало тела подпрограммы} <операторы>end; (* конец тела подпрограммы *)

Если объявление подпрограммы было оторвано от ее описания, то описание начинается дополнительной строкой с указанием только имени подпрограммы:

function <имя_подпрограммы>;

или

procedure <имя_подпрограммы>;

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

Пример подпрограммы-процедуры:

procedure err(c:byte; s:string); var zz: byte; begin if c = 0 then writeln(s) else writeln('Ошибка!') end;