Паскаль: точка повернення, підстановка аргументів, зберігання змінних, Детальна інформація
Паскаль: точка повернення, підстановка аргументів, зберігання змінних
Якщо після виклику підпрограми використовується старе значення аргументу або аргументом може бути довільний вираз, то йому має відповідати параметр-значення. Як параметр функції issimple з прикладу 4.7.
З останнього правила, утім, є винятки, пов'язані з параметрами та аргументами, що є масивами. Про це йтиметься в підрозділі 12.1.
Приклад 1. Розглянемо імітацію виконання програми з викликами підпрограм. Як і в підрозділі 7.1, будемо позначати локальну змінну, наприклад, L підпрограми F, як F.L, відрізняючи її від однойменної змінної програми. Вказівку точки повернення позначимо буквами ТП. Процес виконання програми
program nested ( input, output );
var a, b : integer;
function f ( x : integer ) : integer;
begin
x := x + 1; f := x
end;
function g (var x : integer ) : integer;
begin x := x div 2; g := x end;
begin a := 12; b := f ( g ( a ) ) end.
відобразимо такою таблицею:
Що виконується Стан пам'яті
a b
a := 12 12 ?
починається b := f(g(12)) 12 ?
виклик f(g(12)) 12 ? f. x f. f ТП
12 ? ? ? b:=
починається f. x := g(12) 12 ? ? ? b:=
виклик g(12) g. x ? ? ? b:= g. g ТП
g. x := 12 12 ? ? ? b:= ? f. x:=
g. x := g. X div 2 6 ? ? ? b:= ? f. x:=
g. g := g. X 6 ? ? ? b:= 6 f. x:=
повернення з g 6 ? ? ? b:= 6 f. x:=
закінчення f. x := g(12) 6 ? 6 ? b:=
f. x := f. x + 1 6 ? 7 ? b:=
f. f := f. X 6 ? 7 7 b:=
повернення з f 6 ? 7 7 b:=
закінчення b := f(g(12)) 6 7
З останнього правила, утім, є винятки, пов'язані з параметрами та аргументами, що є масивами. Про це йтиметься в підрозділі 12.1.
Приклад 1. Розглянемо імітацію виконання програми з викликами підпрограм. Як і в підрозділі 7.1, будемо позначати локальну змінну, наприклад, L підпрограми F, як F.L, відрізняючи її від однойменної змінної програми. Вказівку точки повернення позначимо буквами ТП. Процес виконання програми
program nested ( input, output );
var a, b : integer;
function f ( x : integer ) : integer;
begin
x := x + 1; f := x
end;
function g (var x : integer ) : integer;
begin x := x div 2; g := x end;
begin a := 12; b := f ( g ( a ) ) end.
відобразимо такою таблицею:
Що виконується Стан пам'яті
a b
a := 12 12 ?
починається b := f(g(12)) 12 ?
виклик f(g(12)) 12 ? f. x f. f ТП
12 ? ? ? b:=
починається f. x := g(12) 12 ? ? ? b:=
виклик g(12) g. x ? ? ? b:= g. g ТП
g. x := 12 12 ? ? ? b:= ? f. x:=
g. x := g. X div 2 6 ? ? ? b:= ? f. x:=
g. g := g. X 6 ? ? ? b:= 6 f. x:=
повернення з g 6 ? ? ? b:= 6 f. x:=
закінчення f. x := g(12) 6 ? 6 ? b:=
f. x := f. x + 1 6 ? 7 ? b:=
f. f := f. X 6 ? 7 7 b:=
повернення з f 6 ? 7 7 b:=
закінчення b := f(g(12)) 6 7
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021