Если формальные параметры имеют одинаковый тип и способ передачи, то заголовок можно сократить так:
procedure Swap (var x, y: integer);
Принцип объединения в заголовке тот же, что при объявлении однотипных переменных в секции VAR.
Теперь напишем процедуру Swap и программу «P_22_1» для её проверки.
{ P_22_1 – процедура обмена и программа её проверки }
{ процедура обмена }
procedure SWAP(var x,y : integer);
var t: integer;
begin
t:= x; x:= y; y:= t;
end;
var A, B : integer;
begin {--- главная программа ---}
A:= 10; B:= 20;
Writeln(’A= ’, A, ’ B= ’, B);
SWAP(A, B);
Writeln(’A= ’, A, ’ B= ’, B);
Readln;
end.
Работает ли эта программа? Обязательно проверьте!
Вернемся к программе P_20_1, где возможности процедуры Scan небогаты: допускается менять только символы «A» на символы «B». А если надо менять символы по своему усмотрению? Пожалуйста! Добавим в заголовок процедуры пару формальных параметров, например, так:
procedure Scan(var arg: string; Ch1, Ch2: char);
var k: integer;
begin
for k:=1 to Length(arg) do
if arg[k]= Ch1 then arg[k]:= Ch2;
end;
Здесь параметры Ch1 и Ch2 указывают, что и на что надо поменять. Поскольку параметры однотипны, они разделяются запятой. Порядок объявления формальных параметров в заголовке не важен. Но важно, чтобы при вызове процедуры порядок фактических параметров был таким же. Вот пример правильного вызова (символ «1» меняется на символ «2»).
Scan(S, ’1’, ’2’);
А вот ошибочные:
Scan(S, ’1’); { указаны не все параметры }
Scan(’1’, S, ’2’); { нарушен порядок следования параметров }
Scan(S, ’1’, ’2’, ’3’); { указан лишний параметр }
Scan(S, 1, 2); { неверный тип параметров }