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

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

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

В заголовке процедуры за ключевым словом PROCEDURE указывают имя процедуры, а в скобках — список параметров со своими описаниями.

Имя процедуры выбирается пользователем в соответствии с правилами образования имен. Описание необходимых Шествий в процедуре осуществляется с помощью формальных параметров, которые используются только в теле процедуры и локальны по отношению к ней. Напрцмер, сложение дробей, записанных в общем виде: H/Z = H1/Z1 + Н2/Z2, можно описать процедурой:

FROCEDURE DROB(VAR H,Z,Hl,H2,Z1,Z2:INTEGER);

BEGIN

H:=H1*Z2+H2*Z1

Z:=Z1-Z2

END

Блок процедуры заканчивается символом - точка с запятой.

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

Пример 1.26. Составить программы для вычисления используя процедуру

Программа имеет вид:

PROGRAM FUN1(INPUT,OUTPUT);

VAR A,B,Z,C,D,T1, T2, T3:REAL;

PROCEDURE TH(VAR X,R:REAL);

VAR E:REAL;

BEGIN

E:=EXP(2.0*X);

R:=(E-1)/(E+1);

END;

BEGIN

READ(A,B);

TH(A, T1);

C:=A-B;

TH(C, T2);

D:=SQR(A)-SQR(B);

TH(D, T3);

Z:=(T1-SQR(T2))/SQRT(T3);

WRITELN(' Z=', Z:10:3);

END.

В программе имеются три оператора обращения к процедуре с фактическими параметрами (A, T1), (С, Т2), (D, ТЗ), d результате получаются промежуточные результаты с именами ТI, Т2, ТЗ, которые применяются в программе.

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

Пример 1.27, Составить программу с процедурой без параметров для вычисления полярных координат и по прямоугольным x и y ().

Программа имеет вид:

PROGRAM PREOPR1(INPUT, OUTPUT);

VAR X,Y,R,F:REAL;

I,H:INTEGER;

PROCEDURE FOLAR;

BEGIN

R:=SQRT(X*X-Y*Y);

F:=ARCTAN(Y/X);

END;

BEGIN

READ (N);

FOR I:=1 TO N DO

BEGIN

READLN(X,Y);

POLAR;

WRITELN (R,F);

END;

END.

Пример 1.28 составить программу с процедурой без параметров для вычисления значений ; где r, f - полярные

координаты вектора с прямоугольными координатами: ; . Программа имеет вид:

PROGRAM PRE0BR2 (INPUT,OUTPUT);

VAR X, Y, R, F, D, S:REAL;

I, H: INTEGER

PROCEDURE FOLAR;

BEGIN

H:=SQiRT(X*X+Y*Y);

F:= ARCTAN(Y/X);

END;

BEGIN

D:=1.0;

S:=0;

READ (N);

FOR I: =1 TO N DO

BEGIN

X:= I/(1+I*I);

Y:=1/I;

FOLAR;

D:=D*R;

S:=S*F;

END;

WRITE (D,S);

END.

Функции представляют собой последовательность операторов, в результате выполнения, которых вычисляется одно значение, присваиваемое имени функции. Синтаксические диаграммы раздела описания функций приведены на рис. 1.27, заголовка функции - на рис. 1.30. Заголовок функции оформляется аналогично заголовку процедуры. В отличие от процедуры в заголовке должен быть определен тип результата, возвращаемого функцией посредством имени функции. Как правило, окончательный результат присваивается в конце тела функции.

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

Заголовок функции

 
 
 
 


Обращение к функции осуществляется в правой части оператора присваивания, при этом в выражении записывается имя функции и фактические параметры. После выполнения функции вычисленное значение присваивается имени функции и передается в выражение.

Пример 1.29. Составить программу для определения числа сочетаний, используя функцию при вычислении факториала.

Программа имеет вид:

PROGRAM KOL (INPUT,OUTPUT);

VAR NCH, N, M, L:INTEGER;

FUNCTION FACT (K: INTEGER):INTEGER;

VAR P, I:INTEGER;

BEGIN

P: = 1;

FOR I: = 1 TO К DO P:=P*I;

FACT:=P;

END;

BEGIN

READ(N,H);

L:=N-M;

NCH:=FACT(N)/FACT(M)/FACT(L);

WRITELN(‘ЧИСЛО СОЧЕТАНИИ С ИЗ N ПО M =', NCH);

END.

Пример 1.30. Составить программу для решения примера 1.26, используя подпрограмму функцию.

Программа имеет вид:

PROGRAH FUN2 (INPUT i OUTPUT)ж

VAR A, B, Z:REAL;

FUNCTION TH(X:REAL):REAL;

VAR С:REAL;

BEGIN

C:=EXP(2.0*X);

TH:=(C-I)/(C+1);

END;

BEGIN

READ (A,B);

Z:=(TH(A) +SQR(TH(A—B)))/SQRT(TH(A*A-B*B));

WRITE(Z);

END.

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

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

Примеры записи:

PROCEDURE SUMMA (Х, Y,Z:REAL);

PROCEDURE SCALYR (А,B:REAL;N:INTEGER);

PROCEDURE TH (VAR X,R:REAL);

FUNCTION SLED (B:REAL; I,J:INTEGER);

FUNCTION SPOK(A, B, С:BOOLEAN);

Если два или более формальных параметров одного и того же типа указаны последовательно в списке, то их можно объединить в одном описании следующим образом:

PROCEDURE SUMMA (Х:REAL; Y:REAL; Z:REAL);

PROCEDURE SCALYR (А:REAL; B:REAL; N:INTEGER);

PROCEDURE TH (VAR X:REAL; VAR R:REAL);

FUNCTION SLED (B:REAL; I:INTEGER; J:INTEGER);

FUNCTION SPOK(A:BOOLEAN; B:BOOLEAN; С:BOOLEAN);

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

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


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



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