Описание блока подпрограммы-функции в общем виде имеет следующую структуру:
FUNCTION <имя> ( <формальные параметры> ) : <тип>;
{ раздел описаний: переменные, типы, метки}
BEGIN
{ операторы функции }
<имя> := <выражение> {имени функции присваивается значение}
END;
Функция передает в вызывающую программу единственное значение, которое хранится под ее именем. В качестве переменных могут использоваться параметры-переменные и параметры-значения. <Тип> функции должен соответствовать значению, которое вычисляется в данной подпрограмме (типу результата). В вызывающую подпрограмму передается значение функции данного типа.
Вызов функции в программе производится не обособленно, как в процедуре, а в выражении указывается имя функции со списком параметров.
Примеры и задания с подпрограммой-функцией
Пример 1. Вычислить вторую и N-ю степени числа Х.
PROGRAM FUNC;
VAR X: REAL; N: INTEGER;
FUNCTION STEPEN(M: INTEGER; A: REAL): REAL;
VAR P: REAL;
I: INTEGER;
BEGIN
P := 1;
FOR I :=1 TO M DO P := P*A;
STEPEN := P;
END;
BEGIN
READ(X,N);
WRITELN(' X=', X, ' квадрат', STEPEN(2,X));
WRITELN(' X=', X, ' степень', STEPEN(N,X));
END.
Пример 2. Даны три массива A (5), B (5), C (5). Найти среднее арифметическое значение наименьших элементов массивов.
До написания программы разрабатывается СА главной программы (рис. 14, а) и СА для подпрограммы нахождения наименьшего элемента в любом массиве (рис. 14, б).
Отлаженная программа решения задачи имеет следующий вид:
Program lr8;
type
mass = array[1..5] of integer;
const a: mass = ( 5,2,7,1,8 ); {заданы массивы констант}
b: mass = ( 3,4,5,6,6 );
c: mass = ( 3,8,5,2,6 );
var n: integer;
sr: real;
FUNCTION minim(d:mass) : integer; {заголовок функции}
var i, min: integer;
begin {начало блока операторов функции}
min:=d[1];
for i:=2 to 5 do
if d[i]<min then min:=d[i];
writeln('минимальный элемент равен ',min);
minim := min {имени функции присваивается значение}
end; {конец блока функции}
BEGIN {блок основной программы}
sr: = (minim(a) + minim(b) + minim(c)) /3; {три обращения к функции}