Подпрограммы Понятие подпрограммы Если часть программы используется более одного раза, то можно не повторять текст программы, а оформить эту часть программы в виде процедуры или функции. Они вызываются на исполнение каждый раз, когда нужно выполнить эту часть программы. При этом саму программу называют основной программой, а процедуру или функцию подпрограммой.
Отличие функции от процедуры заключается в том, что функция вычисляет одно единственное значение простого, строкового или ссылочного типа. Если результатом работы подпрограммы не может быть единственное значение, то лучше использовать процедуру.
Процедуры и функции являются самостоятельными фрагментами программы, связанными с основной программой лишь с помощью нескольких параметров. Структура подпрограммы повторяет структуру всей программы, но вместо заголовка программы содержит заголовок подпрограммы, который является обязательным. Формат заголовка: FUNCTION <имя> [ (<список формальных параметров>) ] : <тип> ;
PROCEDURE <имя> [ (<список формальных параметров>) ] Здесь: <имя> - имя подпрограммы (правильный идентификатор);
<тип> - тип возвращаемого функцией результата. Например, FUNCTION F(a, b: Real): Real;
PROCEDURE SB (a: Real; b: Integer; c: Char); Переменные, описанные в основной программе, являются глобальными для подпрограмм. Все переменные из списка формальных параметров подпрограмм могут использоваться в любых выражениях внутри подпрограммы и являются локальными.
Любой из формальных параметров подпрограммы может быть либо параметром–значением, либо параметром–переменной, либо, наконец, параметром–константой. Например,
PROCEDURE MyProcedure (var a: Real; b: Real; const c: String); Здесь А – параметр-переменная, В – параметр-значение, а С - параметр-константа. Так как любое имя в программе обязательно описывается перед тем, как оно появится среди исполняемых операторов, то и подпрограмма должна быть предварительно определена в разделе описаний основной программы. Описанием (определением) основной программы является её собственный текст, который содержит заголовок и тело подпрограммы.
Например,
PROGRAM A;
Var x,y: integer;
PROCEDURE REV(a,b: integer);
Begin
Writeln(b:3, a:3);
End;
Упоминание имени подпрограммы в тексте основной программы приводит к активации подпрограммы и называется её вызовом. Сразу после активации подпрограммы начинают выполняться, входящие в неё операторы. После выполнения последнего из них управление возвращается обратно в основную программу и далее выполняются операторы, стоящие непосредственно за оператором вызова подпрограммы.
Для вызова подпрограммы на исполнение используется оператор, который состоит из её имени и списка фактических параметров (если при определении подпрограммы был указан список формальных параметров). Например,
Begin
REV (x,y);
REV (4,5*SQRT(x-y));
End.
Каждый раз при вызове подпрограммы вычисляются фактические параметры, которые могут быть константами (4), переменными (x,y) или выражениями (5*Sqrt(y-x)).
При вызове подпрограммы необходимо соблюдать следующее правило: количество, тип и порядок следования фактических параметров должен строго соответствовать количеству, типу и порядку следования соответствующих формальных параметров.
Подпрограмма–функция В теле функции должен присутствовать хотя бы один оператор присваивания с идентификатором функции в левой части. Пример1.
Реализовать функцию с именем POWER, осуществляющую возведение любого вещественного числа в любую вещественную степень.
Решение.
.В программе вводится пара чисел X и Y и выводится на экран дисплея результат возведения X сначала в степень +Y, а затем – в степень –Y. Для выхода из программы нужно ввести Ctrl-Z и Enter. Var
X, y: Real;
{-----------}
Function Power (a, b : Real) : Real;
Begin {Power}
If a > 0 then
Power := exp (b * ln(a))
Else if a < 0 then
Power := exp (b * ln(abs(a)))
Else if b = 0 then
Power := 1
Else
Power := 0
End {Power};
{--------------}
Begin {main}
Repeat
Readln (x, y);
Writeln (Power (x, y): 12:10, Power(x, -y):15:10);
Until EOF
End {main}. Для вызова функции POWER мы просто указали ее в качестве параметра при обращении к встроенной процедуре WRITELN. Параметры X и Y в момент обращения к функции – это фактические параметры. Они подставляются вместо формальных параметров A и B в заголовке функции и затем над ними осуществляются нужные действия. Полученный результат присваивается идентификатору функции – именно он и будет возвращен как значение функции при выходе из нее. В программе функция POWER вызывается дважды сначала с параметрами X и Y, а затем X и –Y, поэтому будут получены два разных результата.
|