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

Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры представляет собой локальный блок, по структуре аналогичный программе.

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

procedure <имя> (Формальные параметры);

const ...;

type ...;

var ...;

begin

<операторы процедуры>
end;

Использование процедуры на примере программы поиска максимума из двух целых чисел.


var x,y,m,n: integer;
procedure MaxNumber(a,b: integer; var max: integer);
begin
if a>b then max:=a else max:=b;
end;
begin
write('Введите x,y ');
readln(x,y);
MaxNumber(x,y,m);
MaxNumber(2,x+y,n);
writeln('m=',m,'n=',n);
end.

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

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


Туре proc=procedure (a,b,c:real;Var d:real):
func=function(x: real): real;


Значениями переменных процедурных типов являются идентификаторы процедур и функций с соответствующими заголовками:

Var f:func;
...

f:fun1;


Процедуры или функции, идентификаторы которых будут передаваться в качестве параметров процедурного типа, по правилам языка необходимо компилировать в режиме дальнего вызова (с указанием директивы компилятора {$F+} или служебного слова far). В этом режиме при вызове подпрограмм используются длинные 4-байтовые адреса в отличие от коротких 2-байтовых адресов, которые применяются для адресации подпрограмм, объявленных в основной программе или ее подпрограммах.

Параметры-функции.

<...>

Параметры-процедуры.

<...>

Hosted by uCoz