Подпрограмма-функция предназначена для вычисления какого-либо значения. Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок функции:
function <имя_функции> (<список формальных параметров>): тип_возвр_значения;
Функция может возвращать значения следующих типов: любого порядкового, любого вещественного, типа string. Тело функции имеет структуру, аналогичную структуре программы на языке Pascal. При этом в разделе операторов в теле функции должен находиться, по крайней мере, один оператор, присваивающий имени функции значение. В основную программу возвращается результат последнего присваивания.
Обращение к функции осуществляется по имени в составе некоторого выражения с указанием списка фактических параметров.
Функция имеет четыре основных отличия от процедуры:
- заголовок;
- в теле функции хотя бы один раз (перед выходом из подпрограммы) имени функции должно быть присвоено значение;
- функция не имеет выходных параметров, она возвращает единственное значение (результат);
- вызов функции происходит в составе некоторого выражения внутри оператора, в то время как процедура не может выступать в качестве операнда в выражении.
Пример. Используя функцию, найти сумму чисел А и В, вводимых с клавиатуры.
Program Primer;
Uses Crt;
Var A, B, Summa : Integer;
Function Sum(C, D:Integer):Integer; {описание функции}
Var S:Integer; {для нахождения суммы двух чисел}
Begin
S:=C+D;
Sum:=S;
End;
Begin
Clrscr;
Writeln(‘Введите первое число’);
Readln(A);
Writeln(‘Введите второе число’);
Readln(B);
Summa:=Sum(A,B); {вызов функции}
Writeln(‘Сумма равна ’,Summa);
Readkey;
End.
Задача
Сформировать матрицы А{15,13} и В{5,7}. Вывести их. Используя функцию, найти максимальные элементы матриц.
а) Схема алгоритма основной программы:
б) Схема алгоритма функции поиска максимального элемента матрицы.
Схемы алгоритмов процедур формирования и вывода матрицы см. в Занятии 5.
Program Primer;Uses Crt;Type Matrica=array[1..15,1..13] of Integer;Var A, B : Matrica;Max1, Max2 :Integer;Procedure Input(Var D:Matrica; N,K:Integer);Var i, j : Integer;BeginRandomize;For i:=1 to N Do For j:=1 to KDo D[i,j]:=Random(10)-5;End;Procedure Output(D:Matrica; N,K:Integer);Var i, j : Integer;Begin
For i:=1 to N
Do Begin
For j:=1 to K
Do Write(D[i,j]:4,’ ‘);Writeln;End;End;Function Max_Elem(D:Matrica; N,K:Integer):Integer;
Var i, j, max : Integer;
Begin
Max:=D[1,1];For i:=1 to NDo For j:=1 to K
Do If D[i,j]>Max
Then Max:=D[i,j];Max_Elem:=Max;End;BeginInput(A,15,13);Input(B,5,7);Clrscr;Writeln(‘Матрица А’);Output(A,15,13);Readkey;Clrscr;Writeln(‘Матрица В’);Output(В,5,7);Readkey;Max1:=Max_Elem(A,15,13);Max2:=Max_Elem(B,5,7);Writeln(‘Макс. элемент матрицы А равен Writeln(‘Макс. элемент матрицы B равен Readkey;End.
{заголовок программы}{объявление типа - матрица}{объявление переменных}{процедура формирования матрицы} {указанной размерности}{N – число строк в матрице}{K – число столбцов в матрице}{формирование матрицы с помощью}{датчика случайных чисел}{процедура вывода матрицы заданной} {размерности}{N – число строк в матрице}{K – число столбцов в матрице}{функция поиска максимального}{элемента в матрице указанной}{размерности}{основная программа}(вызов процедуры форм-я для матрицы А){вызов процедуры форм-я для матрицы В}{очистка экран}{вызов проц. вывода матр. для матр. А}{ожидание нажатия любой клавиш}{очистка экрана}{вызов проц. вывода матр. для матр. В}{ожидание нажатия любой клавиши}{вызов ф-ии Max_Elem для матрицы А}{вызов ф-ии Max_Elem для матрицы В}’,Max1); {вывод максимума для матрицы А}’,Max2); {вывод максимума для матрицы В}{ожидание нажатия любой клавиш}{конец программы}