Функция — это независимый программный блок (программная единица), который позволяет получить только один результат.
Примером являются стандартные функции Паскаля. Имеется возможность писать свои функции. Располагаются они в программе так же, как процедуры: после описания данных и перед операторами.
Пример. Program . . .;
Const
. . .
Var
. . .
Функция_1
. . . . .
Функция_n
Begin { основная программа }
. . . . .
End.
Функция оформляется так же, как процедура. Отличие имеется в заголовке и способе передачи результата. В общем виде функция оформляется так:
Function Имя(формальные_параметры):Тип_Результата;
Описание локальных переменных
Begin
. . . .
Имя := Выражение;
. . . .
End;
Формальные параметры – это аргументы функции. Они могут отсутствовать. Результат передается через имя функции, поэтому в заголовке указывается тип результата. По этой же причине среди операторов в теле функции должен быть хотя бы один, в котором имени функции присваивается значение. Именно это значение и будет возвращено функцией в качестве результата.
Пример. Оформить в виде функции операцию возведения вещественного числа в целую степень.
Function Stepen(x:Real;n:Integer):Real;
Var
i:Integer;
P:Real;
Begin
If X = 0 Then
If n = 0 Then
Stepen := 1
Else
Stepen := 0
Else
If n = 0 Then
Stepen := 1
Else
If n > 0 then
Begin
P := 1;
For i := 1 to n do
P := P*X;
Stepen := P;
End
else
Begin
P:=1;
For i := 1 to Abs(n) do
P := P/X;
Stepen := P;
End;
End; { Stepen }
Для вычисления значения функции с конкретным параметром ее, как и процедуру, вызывают из основной программы с указанием фактических параметров–аргументов. В отличие от процедуры имя функции может встречаться в выражениях в качестве операнда. Когда выражение вычисляется, функция выполняется и значением операнда становится величина, возвращаемая функцией.
Формальные параметры функции могут быть только параметрами–значениями. При ее вычислении они не изменяются. Аргументы функции могут быть любых типов:
1) скалярные — числа, символы, булевские;
2) массивы;
3) другие типы.
Сама функция (результат) имеет только скалярный тип, (т.е. число - целое или вещественное, а также символ или булевская переменная).
При обращении к функции (вызове ее) на место формальных параметров подставляются фактические, как в процедуре. Типы, количество и порядок следования фактических и формальных параметров должны совпадать.
В теле функции могут использоваться (вызываться) и другие функции, стандартные или написанные пользователем.
Пример.Вычислить гиперболический синус по формуле:
Sinh(x) = (ex– e-x)/2
Функция будет иметь вид
Function Sinh(X:Real):Real;
Begin
Sinh := (Exp(X)-Exp(-X))/2;
End;
К функции можно обращаться из основной программы; из другой функции и из самой себя.
Функции, которые вызывают сами себя, называются рекурсивными. Такие функций часто встречаются в математике, например, вычисление факториала, возведение числа в целую степень, вообще, нахождение любых значений методом математической индукции. Так, факториал вычисляется по формуле:
n! = n*(n -1)! - при n>0 и
n! = 1 - при n=0.
Для рекурсивных функций необходимо вырабатывать условие завершения (иначе произойдет зацикливание). Это условие для n! записано во второй строчке (при n=0) – так как рекурсия производится на основе второго сомножителя - (n-1)!=(n-1)*(n-2)! и т.д. - до нуля.