Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С_испр_обработка_массивов_new.doc
Скачиваний:
28
Добавлен:
14.08.2019
Размер:
2.49 Mб
Скачать

Функции Описание функции

Описание Функция в языке Turbo Pascal состоит из заголовка и тела функции. Так как структура раздела описаний и раздела операторов подпрограммы аналогична структуре соответствующих разделов основной программы, рассмотрим подробно только правила составления заголовка подпрограммы-функции.

Формат заголовка функции:

Function : ;

В качестве формальных параметров функции необходимо указать только входные данные. Правила составления списка формальных параметров для подпрограммы-функции такие же, как и при описании подпрограмм-процедур.

Результат, полученный с помощью функции, возвращается через ее имя и является единственным значением простого, строкового или ссылочного типа. Тип результата указывается в заголовке как <тип результата>.

Примеры заголовков подпрограмм-функций:

Function Summa(x,y:integer):integer;

Function Prizn:boolean; {функция без параметров}

Function ABC(a,b : real; k:integer):real;

Для возврата результата в вызывающий модуль в разделе операторов тела функции должен быть, по крайне мере, один специальный оператор, присваивающий имени функции значение результата <имя_функции>:=<результат>..

Имя функции может присутствовать только в левых частях операторов присваивания в теле функции.

Если функция, кроме вычисления результата, меняет какие либо глобальные данные или производит другие действия, не связанные с вычислениями своего значения, говорят, что функция имеет побочный эффект. Таких ситуаций следует избегать.

Вызов функции

Вызов функции осуществляется как .

Вызов функции может встречаться многократно в разделе исполняемых операторов модулей, которым эта функция доступна. Каждый фактический параметр должен быть определен (т.е. быть описанным и иметь значения) в вызывающем модуле.

Вызов функции не является отдельным оператором (в отличие от вызова процедуры), так как имя функции возвращает определённое значение (результат) в вызывающий модуль. Поэтому вызов функции в программе может встречаться там, где могут встречаться выражения, может быть операндом любого выражения и фактическим параметром при вызове функций и процедур.

Примеры вызовов функций:

m:=ABC(x,y,z);

writeln(’Сумма=’, Summa(a,b));

if Prizn then y:=5;

Примеры использования подпрограмм-функций

Продемонстрируем использование подпрограмм-функций для решения задач, разобранных выше.

Задача 1: найти среднее арифметическое двух пар чисел А и В, С и D.

Program Primer_Function_1;

Var {раздел описания глобальных переменных}

A, B, C, D, S1, S2 : real;

Function Sum (N, M: integer):real; {заголовок функции}

Begin

Sum := (N + M) / 2 {присвоение имени функции вычисленного значения }

End; {конец описания функции}

Begin {начало основной программы}

Writeln(’Введите 4 числа’);

Readln(A,B,C,D);

S1 := Sum (A, B); {вызов функции }

S2 := Sum (C,D) {вызов функции }

Writeln (’S1=’, S1:6:2,’S2=’, S2:6:2)

End.

Задача 2: найти сумму элементов главных диагоналей матриц A(n,n) и B(m,m) (n<=10, m<=15).

Program Primer_Function_2;

Const

Nmax=15;

Type

tmatr=array[1..Nmax, 1..Nmax] of real;

Var {раздел описания глобальных переменных}

A, B: tmatr;

n, m: byte;

Sab :real;

procedure EnterMatr(var matr : tmatr; var nm : byte; ch:char);

var

i, j : byte;

begin

write(‘Введите размерность квадратной матрицы ’,ch);

readln(nm);

writeln(‘Введите элементы матрицы по строкам’);

for i:=1 to nm do

for j:=1 to nm do

begin

write(ch,’[’,i, ’,’,j, ’]=’);

read(matr[i,j]);

end;

end;

Function Summa(const matr : tmatr; nm:byte) : real; {заголовок функции}

Var{раздел описания локальных переменных, используемых в теле функции}

i: byte;

s : real;

begin

s:=0;

for i:=1 to nm do

s:= s+ matr[ i, i ];

Summa := s

end; {конец описания функции}

begin {начало основной программы}

EnterMatr(A, n, ’А’); {вызов процедуры для ввода матрицы А}

EnterMatr(В, m, ’B’); {вызов процедуры для ввода матрицы В}

Sab := Summa (A, n)+ Summa (B,m) ;

Writeln (’Sab=’, Sab:6:2)

end.