Функции
Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции может входить в выражение как операнд. Например, функция Chr(65) возвратит в точку вызова символ А (код ASCII — 65), Sqr(X) —возведет в квадрат значения целого или вещественного X и возвратит в точку вызова вычисленное значение квадрата числа X.
Синтаксис описания функции очень похож на синтаксис описания процедуры-оператора: <описание функции>::= <заголовок фунщии>; <блок>
<заголовок функции>::= Function <имяфункции>:<тпп> |
Function <имя функции>(<список формальныхпараметров>): <тип>.
Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function, идентификатор (имя) функции, заключенный в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре аналогичный программе:
function <имя> (Формальные параметры) : <тип результата>;
const ...;
type
var ...; .
begin
<операторы>
end;
Для однозначно го определения результата выполнения функции, в ее разделе операторов обязательно должен присутствовать хотя бы один оператор присваивания вида
<имя функции> := <выражение>,
который и означает, что в качестве значения функции принимается значение заданного в нем выражения. Операторов присваивания указанного вида может быть и несколько, но хотя бы один и них должен выполняться в процессе выполнения тела функции. Результат последнего по времени выполнения оператора присваивания указанного вида и принимается в качестве окончательное значения функции.
В качестве примера приведем программу вычисления выражения Z=(A5+A3)/2*Am в которой возведение в степень выполняется функцией Step.
{Программа вычисления выражения Z=(А5+А3) /2*Аm}
program DemoFuncj;
var М : integer;
A,Z,R : real;
function Step(N : integer; X : real): real;
var I : integer; У : real;
begin
Y:=1;
for I:=l to N do
Y:=Y*X;
Step:=Y
end;
begin
Write('Введите значение числа А и показатель степени М');
Readln(A,M);
Z:=Step(5,A);
Z:=Z+ Step(3,1/A);
if M=0 then R:=l
else if M>0 then R:=Step(M,A) else R:=Step(—M,1/A);
Z:=Z/2*R;
Writeln('Для А=',А,'M=',М,' Значение выражения =',Z);
end.
Итак, отличие подпрограмм-процедур от подпрограмм-функций состоит в том, что процедуры служат для задания совокупности действий, направленных на изменение внешней по отношению к ним программной обстановки, а функции, являясь частным случаем процедур, отличаются от них тем, что они обязательно возвращают в точку вызова основной программы единственный результат как значение имени этой функции.
Процедура не может выступать как операнд в выражении
