Что будет выведено на экран в результате работы этой программы? - 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.
Объяснение кода листинга программы
- Объявляются глобальные переменные:
- Название:
a
, Значение: 0 - Название:
b
, Значение: 0 - Название:
c
, Значение: 0 - Название:
d
, Значение: 0
- Название:
- Определяется функция f с параметрами
b
иc
:- Название:
b
, Значение: значение переменнойb
из вызова функции - Название:
c
, Значение: значение переменнойc
из вызова функции
- Название:
- В теле функции:
- Значение a изменяется на 2.
- Выполняется операция b + 1, результат записывается обратно в b.
- d устанавливается в 3.
- c устанавливается в b - a, то есть 3 - 2.
- Выводятся значения a, b, c, d.
- Возвращается значение переменной
d
.
- В основной программе:
- Значение a устанавливается в 0.
- Значение b устанавливается в 0.
- Значение c устанавливается в 0.
- Значение d устанавливается в 0.
- Вызывается функция f с параметрами
a
иb
, результат записывается в d. - Выводятся значения a, b, c, d.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д