Практически все сказанное о процедурах верно и для функций. Отличие функции от процедуры состоит в том, что функция не имеет выходных параметров, она возвращает единственное значение – это значение функции. Входные параметры называются еще аргументами функции.
1. Описание функции
Function <имя> (<список аргументов>): <тип значения функции>; { заголовок }
<блок описания локальных данных>
Begin { начало исполняемой части функции }
<тело функции (исполняемая часть)>
End; { конец описания функции }
В теле функции обязательно должна быть команда присваивания вида:
<имя функции> :=<вычисленное значение>;
которая и позволит функции возвратить вычисленное значение.
Например, опишем функцию вычисления среднего арифметического двух целых чисел:
Function middle (a, b : integer) : real;
Begin
Middle := ( a + b ) / 2
End;
В данном примере тело функции – единственный оператор присваивания, который присваивает имени функции нужное значение.
Примеры решаемых задач
Пример 1. Составить программу, которая вычислит значение выражения
am+bn+(a-b)m+n.
Вычисление степени числа оформить в виде подпрограммы.
Пояснение. Составим и сравним две программы: с использованием процедуры и функции вычисления степени числа.
Программа:
program calc_proc;
uses crt;
var a, b, m, n, s1, s2, s3, s : integer;
procedure stepen (x, y : integer; var z : integer);
{процедура возводит число x в степень y, результат записывает в z}
{т.е. в процедуре описано правило вычисления z=xy}
var i : integer; { локальная переменная для организации цикла }
begin
z := 1;
for i := 1 to y do z := z * x
end;
begin
clrscr;
write(‘Введите a, b, m, n ’);
readln(a, b, m, n);
{ три раза вызываем процедуру stepen для вычисления трех слагаемых }
stepen(a, m, s1); { вычислили s1 как am }
stepen(b, n, s2); { вычислили s2 как bn }
stepen(a-b, m+n, s3); { вычислили s3 как (a-b)m+n }
s := s1 + s2 + s3; { вычислили сумму трех слагаемых }
writeln(‘Значение выражения ’, s);
readln
end.
program calc_func;
uses crt;
var a, b, m, n, s : integer;
function stepen (x, y : integer) : integer;
{ функция возводит число x в степень y }
{ т.е. описано правило вычисления stepen = xy }
var i ,z : integer; {локальные переменные: i для организации цикла, z для вычисления произведения }
begin
z := 1;
for i := 1 to y do z := z * x;
stepen := z { присвоили имени функции вычисленное значение }
end;
begin
clrscr;
write(‘Введите a, b, m, n ’);
readln(a, b, m, n);
{ три раза вызываем функцию stepen для вычисления трех слагаемых }
s := stepen(a, m) + stepen(b, n) + stepen(a-b, m+n, s3);