Описание функции отличается от описания процедуры незначительно:
function имя [(список параметров)] : тип; { заголовок }
разделы описаний
begin
раздел операторов
имя := выражение;
end;
Квадратные скобки в данном случае означают, что список параметров может отсутствовать. Функция вычисляет одно значение, которое передается через ее имя. Следовательно, в заголовке должен быть описан тип этого значения, а в теле функции — оператор, присваивающий вычисленное значение ее имени. Он не обязательно должен находиться в конце функции. Более того, таких операторов может быть несколько — это определяется алгоритмом. Рассмотрим пример применения функции для программы, приведенной в предыдущем разделе.
Пример. Найти разность средних арифметических значений двух вещественных массивов из 10 элементов(пример 4.2).
program dif_average1;
const n = 3;
type mas = array[1 .. n] of real;
var a, b : mas;
i : integer;
dif : real;
function average(x : mas) : real; { 1 }
var i : integer; { 2 }
av : real;
begin
av := 0;
for i := 1 to n do av := av + x[i];
average := av / n; { 3 }
end;
begin
for i := 1 to n do read(a[i]);
for i := 1 to n do read(b[i]);
dif := average(a) – average(b); { 4 }
writeln('Разность значений ', dif:6:2)
end.
Листинг 4.2. Разность средних арифметических значений массивов (функция)
Оператор {1} представляет собой заголовок функции. Тип функции определен как вещественный, потому что к такому типу относится среднее арифметическое элементов вещественного массива. Оператор {3} присваивает имени функции вычисленное значение. В операторе {4} функция вызывается дважды: сначала для одного массива, затем для другого.