double arrow

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

 

Хотя набор встроенных функций Паскаля достаточно широк, он вряд ли может удовлетворить требованиям каждого программиста. Поэтому пользователю предоставляется возможность самому реализовывать нужные ему алгоритмы в виде функций и обращаться к ним из программ по мере необходимости. Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок состоит из ключевого слова Function, имени функции, необязательного списка формальных параметров, заключенного в круглые скобки с указанием типа каждого параметра и типа возвращаемого результата.

Формат

Function <имя>{(формальные параметры)}:тип; {заголовок}

<разделы описаний>

Begin

<раздел операторов> {тело функции}

End;

Например, Function One(X:integer):real;

Function Sum:real;

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

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

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

Особенности, присущие функциям:

1. Обязательно задается тип возвращаемого результата.

2. В результате работы функции получается только один результат.

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

4. Обращение к функции должно происходить только из какого-либо выражения, например, Y:=One(X); а не One(X).

Функция без параметров. Обратимся к условию рассмотренного ранее примера, в котором необходимо вычислить большее из двух значений U и V, где U = max(x+y), V = max(0.5, U).

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

Program Max_D;

Var x,y,u,v,a,b:real;

(**************************************)

Function Max:real;

Var S:real;

Begin

If a>b Then S:=a Else S:= b;

Max:=S;

End;

(**************************************)

Begin

Writeln('Введите x,y');

Readln(x,y);

a:=x+y; b:=x*y;

U:=Max;

a:=0.5; b:=u;

V:=Max;

Writeln('U=',u:3:1,' V=',v:3:1);

End.

В этой программе переменные a, b, x, y, U, V описаны как глобальные и используются и в основной программе, и в подпрограмме-функции Max, переменная S – локальная, так как используется только в подпрограмме-функции Max.

 

Функция с параметрами. Обратимся опять к условию предыдущего примера, в котором необходимо вычислить большее из двух значений U и V, где U = max(x+y), V = max(0.5, U) и составим программу с использованием подпрограммы-функции с параметрами.

Program Max_E;

Var x,y,u,v:real;

(****************************************)

Function Max(a,b:real):real;

Var S:real;

Begin

If a>b Then S:=a Else S:= b;

Max:=S;

End;

(****************************************)

Begin

Writeln(' Введите x,y');

Readln(x,y);

U:=Max(x+y,x*y);

V:=Max(0.5,U);

Writeln('U=',u:3:1,' V=',v:3:1);

End.

 

Здесь x, y, U, V – глобальные и, являясь фактическими параметрами подпрограммы-функции Max, используются только в основной программе. Параметры a, b – формальные параметры, используемые при описании подпрограммы-функции Max, переменная S – локальная, так как используется только в подпрограмме-функции Max.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: