Функции пользователя в Паскаль

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

Описание функции пользователя в языке Паскаль состоит из заголовка и тела функции. Заголовок начинается ключевым словом 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.

В случае отсутствия списка фактических параметров выражение вызова функции имеет следующий вид:

имя функции

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