На этом шаге мы рассмотрим правила задания процедур и функций.
Процедуры и функции состоят из операторов, локальных данных и внутренних процедур и функций. Структура описания процедуры и функции имеет следующий вид:
procedure <Имя> (<СписокФормальныхПараметров>); label // Описание локальных меток, const // констант, type // типов и var // переменных. procedure // Описание внутренних function // процедур и функций. begin <Операторы> end;
function <Имя> (<СписокФормальныхПараметров>): <ТипРезультата>; label // Описание локальных меток, const // констант, type // типов и var // переменных. procedure // Описание внутренних function // процедур и функций. begin <Операторы, среди которых должен быть хотя бы один, который присваивает имени функции значение результата> end;
Отличия в описании функции и процедуры касаются только заголовка и раздела операторов, что отмечено непосредственно на вышепоказанных конструкциях. Для демонстрации этих отличий приведем два решения одной задачи, первое из которых выполнено с помощью процедуры, второе - с помощью функции.
Для решения задачи сделаем следующие описания:
const n = 20; //Длина массива. type TVector = array [l..n] of Real; var Vector : TVector; i : Integer;
Процедуру, решающую поставленную задачу, можно записать следующим образом:
procedure Summa (Vec: TVector; Len: Integer; var Sum: Real) ; var i : Integer; S : Real; begin S := 0; for i := 1 to Len do S := S + Vec [i]; Sum := S; end;
Обратим внимание, что вызов процедуры выполняется отдельным оператором:
Summa (Vector, n, MySumma );
Решение той же задачи, оформленное в виде функции можно представить так:
function Summa ( Vec : TVector; Len : Integer ): Real; var i : Integer; S : Real; begin S := 0; for i := 1 to Len do S := S + Vec[i]; Summa := S; // Присваивание имени функции значения // результата является обязательным оператором в теле функции. end;
Заметим, что вызов функции может выполняться там, где допускается ставить выражение, в частности, в правой части оператора присваивания.
MySumma := Summa (Vector, n);
На следующем шаге мы рассмотрим описание экспорта.