Что будет выведено на экран в результате работы этой программы? - Pascal

Узнай цену своей работы

Формулировка задачи:

Что будет выведено на экран в результате работы программы?Объясните эту задачу.
Program Main;
Uses crt;
Var a,b,c,d:integer;
Function f(var b:integer; c:integer):integer;
Var d:integer;
Begin
a:=2; b:=b+1; d:=3; c:=b-a;
Writeln(a,b,c,d);
f:=d;
end;
begin
a:=0; b:=0; c:=0; d:=0;
d:=f(a,b); Writeln(a,b,c,d);
end.

Решение задачи: «Что будет выведено на экран в результате работы этой программы?»

textual
Листинг программы
Program Main;
Function f(var b:integer; c:integer):integer; //данные параметры согласно вызову функции (d:=f(a,b)) можно записать (для понимания только) как Function f(var a:integer; b:integer):integer;
//передача параметра по ссылке означает, что мы передаём функции ссылку на исходное значение. т.е. если мы изменяем параметр внутри функции - он изменяется и "снаружи". модификатор var (есть ещё const, если что)
//передача по значению означает, что мы делаем копию переменной в памяти. на деле это значит, что изменения параметра при выходе из тела функции не сохраняются
Var d:integer;
//теперь по области видимости: если у нас имеются глобальные переменные - они могут изменяться внутри функции. это крайне не рекомендуется. лучше передавать по ссылке как параметр.
//если же мы в теле функции объявляем переменную с таким же именем, как и глобальная - в теле же функции по имени мы будем иметь доступ только к локальной переменной.
Begin
{здесь и далее bl - локальная (если есть), bg - глобальная}
a:=2; //обращение к глобальной переменной.  - значения глобальных переменных: a = 2; bl = 2; bg = 0; cl = 0; cg = 0; dl не определено (переменная не инициализирована); dg = 0
b:=b+1; //изменение ag через ссылку (bl = ag): a = 2+1=3; bl = 2+1=3; bg = 0; cl = 0; cg = 0; dl = не определено; dg = 0
d:=3; //изменение dl: a = 3; bl = 3; bg = 0; cl = 0; cg = 0; dl = 3; dg = 0
c:=b-a; //изменение cl: a = 3; bl = 3; bg = 0; cl = 3-3=0; cg = 0; dl = 3; dg = 0
Writeln(a,b,c,d); //вывод a, bl, cl, dl: 3 3 0 3
f:=d; //возвращаем dl = 3
end;
var
    a, b, c, d: Integer;
begin
    a:=0; b:=0; c:=0; d:=0; //ag = 0; bg = 0; cg = 0; dg = 0
    d:=f(a,b); //ag = 3; bg = 0; cg = 0; dg = 3
    Writeln(a,b,c,d); //вывод ag, bg, cg, dg: 3 0 0 3
end.

Объяснение кода листинга программы

  1. Объявляются глобальные переменные:
    • Название: a, Значение: 0
    • Название: b, Значение: 0
    • Название: c, Значение: 0
    • Название: d, Значение: 0
  2. Определяется функция f с параметрами b и c:
    • Название: b, Значение: значение переменной b из вызова функции
    • Название: c, Значение: значение переменной c из вызова функции
  3. В теле функции:
    • Значение a изменяется на 2.
    • Выполняется операция b + 1, результат записывается обратно в b.
    • d устанавливается в 3.
    • c устанавливается в b - a, то есть 3 - 2.
    • Выводятся значения a, b, c, d.
    • Возвращается значение переменной d.
  4. В основной программе:
    • Значение a устанавливается в 0.
    • Значение b устанавливается в 0.
    • Значение c устанавливается в 0.
    • Значение d устанавливается в 0.
    • Вызывается функция f с параметрами a и b, результат записывается в d.
    • Выводятся значения a, b, c, d.

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы