Предположим, что мы используем в программе стандартную функцию sin(x) (например, в операторе присваивания y:=sin(x)+1 или в процедуре вывода Writeln(sin(x))). Функция sin реализуется транслятором как подпрограмма, включаемая в текст программы пользователя. Здесь x - это параметр, sin - имя подпрограммы. Вычисленное в подпрограмме значение присваивается имени sin.
Функция отличается от процедуры тем, что в качестве выходного результата здесь может быть только одно простое значение, которое присваивается имени функции. Следовательно, имя функции играет роль переменной и, естественно, тип этой переменной должен быть явно указан в описании функции.
Описание функции, как и описание процедуры, состоит из заголовка и блока. Заголовок функции:
Имя типа определяет тип результата. В блоке должно выполняться присваивание имени функции вычисленного выходного значения.
Обращение к функции – это операнд выражения.
Пример 1. Для примера 2 из раздела «Процедуры» оформить вычисление среднего арифметического в виде функции.
Вычисление среднего арифметического для массивов X, Y и Z отличается друг от друга именем массива (X, Y или Z) и именем результирующей переменной (Sx, Sy, Sz). В данном случае целесообразно имя обрабатываемого массива ввести в состав формальных параметров, а результирующей переменной присваивать значение, определяемое именем функции.
Var i,n : integer;
Sx,Sy,Sz : real;
X,Y,Z : Ar;
{ ------------------------- }
Function MiddleAr3(Var Buf:Ar) : real;
Vari : integer; S : real;
Begin
S:=0;
For i:=1 to n do
S:=S+Buf[i];
S:=S/n;
MiddleAr3:=S;
End{ MiddleAr3 };
{ ------------------------- }
Begin
Ввод и печать n, X; формирование Y, Z
Sx:=MiddleAr3(X); Sy:=MiddleAr3(Y);
Sz:=MiddleAr3(Z);
Печать Sx,Sy,Sz
End.
Перенос массива Buf из глобальных переменных в формальные параметры имеет принципиальное значение. Как будет показано ниже, в этом случае для массива Buf никакой памяти не выделяется, а при обращении к функции в ее блоке происходит замена имени Buf на имя фактического массива (X, Y или Z).
Пример 2. Дана прямая и две точки и . Определить, находятся ли эти точки по одну сторону от прямой.
Вначале вычислим отклонения точек от прямой:
.
Точки находятся по одну сторону от прямой (или обе лежат на этой прямой), если .