Sainrad 28 ноября 2019 в 08:05

Что выведет следующая программа? Объясните результат.
program test;
var a,b: integer;
procedure p (Var x:integer; y:integer);
begin
x:=x+1; y:=x+y;
end;
begin
a:=1;b:=2;
p(a,b); writeln(a,’ ‘,b);
p(a,b); writeln(a,’ ‘,b);
readln;
end.
⦁1 2
1 2
⦁2 4
3 7
⦁1 4
1 6
⦁2 2
3 2
⦁Нет правильного ответа

Выведет
⦁2 2
3 2 
сначала переменная а=1 и b =2
вызов процедуры p(a,b) к а добавит 1 и а станет = 2, перед b в заголовке процедуры не стоит var, поэтому данная переменная является параметром-значением и передается по значению, т.е. значение у b всегда остается 2.  После writeln(a,’ ‘,b); на экране выведется 2  2
повторный вызов процедуры p(a,b) к а добавит 1 и а станет = 3, а значение b при выводе вне процедуры по-прежнему останется 2
получим : 3  2

Для комментирования необходимо зарегистрироваться на сайте