Процедуры. Синтаксис спецификации процедуры

Синтаксис спецификации процедуры:

procedure <имя>(<список формальных параметров>);

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

Вызов процедуры – это отдельный оператор, который содержит имя процедуры и список фактических параметров. Например:

P(x); {это вызов процедуры P с фактическим параметром x}

В качестве примера использования процедуры рассмотрим возведение переменной base в степень exponent – baseexponent (аналогично power).

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

procedure power(base, exponent: real; var pow: real);

Begin

pow:= exp(exponent * ln(base));

end;

Пример вызова процедуры power:

power(3, 5, j);

writeln(j);

Значения параметров по умолчанию

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

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

Пример задания значений параметров по умолчанию:

function power(base: real; exponent: real = 2): real;

Begin

result:= exp(exponent * ln(base));

end;

При вызове power(base, 3) параметр exponent получит значение 3 и результатом функции будет base3. В случае вызова power(base) – exponent получит значение 2 (значение по умолчанию) и результатом функции будет base2.

Перегрузка функций

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

Пример перегруженных функций:

function Divide (x, y: real): real; overload;

Begin

if y<>0 then

result:= x / y;

end;

function Divide (x, y: integer): integer; overload;

Begin

if y<>0 then

result:= x div y;

end;

При вызове Divide (2.4, 2.0) будет вызвана первая функция, при вызове Divide (4, 2) – вторая.


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



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