Паскаль позволяет вам использовать большой
Паскаль позволяет вам использовать большой уровень вложен-
ности процедур и функций, и в каждой их этих процедур и функций
могут содержаться ее собственные описания. Рассмотрим следующую
программу:
program Confused;
var
A,B :integer;
procedure Swap(var A,B : integer);
var
T : integer;
begin
Writeln('2: A,B,T = ',A:3,B:3,' ',T);
T := A;
A := B;
TDeb 3.0 #2-3 = 134 =
B := T;
Writeln('3: A,B,T =',A:3,B:3,' ',T);
end { Swap }
begin { тело основной программы Confused }
A:= 10; B := 20; T := 3-;
Writeln('1: A,B,T = ',A:3,B:3,' ',T);
Swap(B,A);
Writeln('4: A,B,T = ',A:3,B:3,' ',T);
end. { Confused }
Выводимая программой информация будет выглядеть примерно
следующим образом:
1: A,B,T = 10 20 30
2: A,B,T = 20 10 22161
3: A,B,T = 10 20 20
4: A,B,T = 20 10 30
Все это вызвано тем, что у вас имеется две версии переменных
A, B и T. В теле основной программы используются глобальные вер-
сии, в процедуре Swap - локальные версии (ее формальные параметры
A и B и локальная переменная T). И что еще более запутало ситуа-
цию, мы обратились с вызовом Swap(B,A), что означает, что фор-
мальный параметр A является на самом деле глобальной переменной B
и наоборот. И, конечно, нет никакой связи между локальной и гло-
бальной версией переменной T.
Настоящей ошибки здесь нет, но проблемы могут возникнуть,
когда вы будете считать, что модифицируете что-то, а на самом де-