Имена называются нелокальными, если они описаны не в самой подпрограмме, а в охватывающем ее блоке (или во внешней подпрог-рамме).

Любые идентификаторы для описания переменных, констант, типов, а также процедур и функций, описанные внутри подпрограммы локализуются только в ней и называются локальными для данного блока (подпрограммы). Такой блок подпрограммы вместе с выделенными в нем модулями называется областью действия этих локальных имен. Локальные имена не являются формальными параметрами.

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

Результатом исполнения операторов, образующих тело функции, всегда является единственное значение, поэтому ее имя может быть использовано в выражениях, наряду с переменными и константами.

Подпрограмма-функция предназначена для вычисления какого-либо параметра.

Подпрограмма-процедура предназначена для выполнения какой-то законченной последовательности действий. Любая процедура начинается с заголовка.

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

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

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

Определение процедур и функций

 

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

 

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

 

Список формальных параметров записывается в скобках и содержит перечень параметров с указанием их типов. Перед параметрами, которые возвращают результат в основную программу, указывается ключевое слово VAR. Например:

 

PROCEDURE SUMM(A1,A2:REAL; BI,B2:INTEGER; VAR S1,S2:REAL);

 

Допускаются процедуры без, параметров:

 

PROCEDURE <имя>;

 

Они предполагают использование в подпрограмме только глобальных переменных, определенных в разделе описаний основной программы.

За заголовком процедуры следует раздел описаний подпрограммы (меток, констант, типов, переменных, а также описаний вложенных проце-дур и функций) и блок операторов.

 

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

 

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

 

Формальные параметры записываются с указанием их типа, кроме того, указывается тип самой функции. За заголовком следует раздел описаний и блок выполняемых операторов.

Пример:

FUNCTION STEP(x, y: REAL):REAL;

VAR a,b:real;

BEGIN

… …

END;

После описания блока процедуры или функции следует оператор END;, за которым ставится точка с запятой.

Поэтому в разделе операторов функции должен быть оператор, который имени функции присваивает значение, вида:

 

<имя функции>:=<выражение>:

 

например: STEP:=<выражение вещественного типа>.

 

Вложенные подпрограммы

 

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

Переменные, описанные в разделе описания основной программы, называются глобальными. Область действия глобальных переменных - основная программа и ее подпрограммы.

Все имена в пределах подпрограммы должны быть уникальными и не могут совпадать с именем самой подпрограммы. При входе в подпрограмму низшего уровня становятся доступными не только объявленные в ней имена, но и сохраняется доступ ко всем именам внешних уровней.

Рекомендуется описывать имена в том блоке, где они используются, если это возможно. Если один и тот же объект (переменная или константа) используется в двух и более блоках, то их описание необходимо сделать в самом верхнем блоке, который содержит все остальные блоки. Если переменная, используемая в подпрограмме должна сохранять свое значение до следующего вызова этой подпрограммы, то она описывается во внешнем блоке, содержащем данную подпрограмму.