Имена называются нелокальными, если они описаны не в самой подпрограмме, а в охватывающем ее блоке (или во внешней подпрог-рамме).
Любые идентификаторы для описания переменных, констант, типов, а также процедур и функций, описанные внутри подпрограммы локализуются только в ней и называются локальными для данного блока (подпрограммы). Такой блок подпрограммы вместе с выделенными в нем модулями называется областью действия этих локальных имен. Локальные имена не являются формальными параметрами.
Отличие функции от процедуры состоит в том, что функция возвращает одно значение в основную программу через свое имя, а процедура может возвращать несколько значений через список параметров.
Результатом исполнения операторов, образующих тело функции, всегда является единственное значение, поэтому ее имя может быть использовано в выражениях, наряду с переменными и константами.
Подпрограмма-функция предназначена для вычисления какого-либо параметра.
Подпрограмма-процедура предназначена для выполнения какой-то законченной последовательности действий. Любая процедура начинается с заголовка.
Все параметры, которые использует подпрограмма, можно разбить на две категории: локальные параметры, объявленные внутри подпрограммы и доступные только ей самой, и глобальные - объявленные в основной программе и доступные как программе, так и всем ее подпрограммам. Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных параметров.
Подпрограмма может использовать глобальные параметры двояким образом:
непосредственно обращаясь к глобальному параметру по его имени или используя механизм формальных параметров. Подпрограмма может непосредственно использовать любые глобальные параметры за исключением тех, которые имеют те же имена, что и ее локальные параметры.
Определение процедур и функций
Если в программе используются процедуры или функции, то их описание должно предшествовать основному блоку программы. Описание состоит из заголовка и тела процедуры (функции), которое обычно следует за заголовком. Заголовок процедуры описывается строкой:
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:=<выражение вещественного типа>.
Вложенные подпрограммы
В разделе описаний любой подпрограммы могут встречаться описания других подпрограмм, тогда говорят, что одна подпрограмма вложена в другую.
Переменные, описанные в разделе описания основной программы, называются глобальными. Область действия глобальных переменных - основная программа и ее подпрограммы.
Все имена в пределах подпрограммы должны быть уникальными и не могут совпадать с именем самой подпрограммы. При входе в подпрограмму низшего уровня становятся доступными не только объявленные в ней имена, но и сохраняется доступ ко всем именам внешних уровней.
Рекомендуется описывать имена в том блоке, где они используются, если это возможно. Если один и тот же объект (переменная или константа) используется в двух и более блоках, то их описание необходимо сделать в самом верхнем блоке, который содержит все остальные блоки. Если переменная, используемая в подпрограмме должна сохранять свое значение до следующего вызова этой подпрограммы, то она описывается во внешнем блоке, содержащем данную подпрограмму.