Функции пользователя в Паскаль
Функция, в отличии от процедуры, возвращает в точку вызова результат своей работы в виде значения и может быть операндом в выражении.
Описание функции пользователя в языке Паскаль состоит из заголовка и тела функции. Заголовок начинается ключевым словом function, после которого идет имя функции, список формальных параметров и тип возвращаемого значения:
- function имя(список формальных параметров): тип возвращаемого значения;
- раздел описаний
- begin
- операторы
- имя := выражение; {или Result := выражение;}
- end;
Отметим, что в разделе операторов должен быть хотя бы один, присваивающий вычисленное значение имени функции или переменной Result. Эта операция необходима для возвращения в точку вызова вычисленного значения:
1. Вычисленное значение присваивается имени функции:
- function Square(a: integer): integer;
- begin
- Square := a * a;
- end;
2. Используется специальная переменная Result, определенная внутри тела любой функции. В отличии от первого способа переменную Result можно использовать в выражениях, например:
- function MinMultMax(a, b, c: integer): integer;
- begin
- Result := Min(Min(a, b), c);
- Result := Result * Max(Max(a, b), c);
- end;
Внимание: если внутри функции не используется присваивание вычисленного значения имени функции или переменной Result, то функция возвращает в точку вызова непредсказуемое значение.
Выражение вызова функции
Для вызова пользовательской функции из основной программы на языке Паскаль используется выражение вызова функции, состоящее из имени функции и необязательного списка фактических параметров:
имя функции(список фактических параметров)
Фактические параметры должны соответствовать по типу и совпадать по количеству формальным параметрам. Таким образом, выражение вызова функции MinMultMax из примера выше может быть представлено следующим фрагментом программы:
- var n1, n2, n3: integer;
- begin
- readln(n1, n2, n3);
- writeln(MinMultMax(n1, n2, n3));
- end.
В случае отсутствия списка фактических параметров выражение вызова функции имеет следующий вид:
имя функции
Внимание: выражение вызова функции можно использовать в описании самой функции. В этом случае она будет выполняться рекурсивно.