Трассировка программ с процедурами
.pdfПримеры трассировки программ
1. Программа с линейным алгоритмом
1PROGRAMACCOUNT1(INPUT, OUTPUT);
2VAR POSTAGE, NUMBER, PRICE, COST:INTEGER;
3BEGIN
4POSTAGE := 5;
5READ(NUMBER, PRICE);
6COST := NUMBER *PRICE;
7COST := COST + POSTAGE;
8WRITE(COST);
9END.
Таблица трассировки
Входные данные: 4 14
Строка |
Ход выполнения |
postage |
number |
price |
|
|
|
|
|
3 |
Вход в Account1 |
? |
? |
? |
4 |
|
5 |
|
|
5 |
Ввод number, price |
|
4 |
14 |
6 |
|
|
|
|
7 |
|
|
|
|
8 |
Печать cost (61) |
|
|
|
9Выход из Account1
Результат: 61
2.Программа с условным оператором
1 PROGRAMPRIM1(INPUT,OUTPUT);
2 VAR X, Y, MAX: INTEGER;
3 BEGIN
4 READ(X, Y);
5 IF X >YTHEN
6 MAX := X
7 ELSE
8 MAX := Y;
9 WRITE(MAX)
10END.
cost
?
56
61
1
|
|
Таблица трассировки |
|
|
Входные данные: 4 |
7 |
|
|
|
Строка |
Ход выполнения |
x |
y |
|
|
|
|
||
3 |
вход в Prim1 |
|
? |
? |
4 |
|
|
4 |
7 |
5 |
(X > Y) (4 > 7) FALSE |
|
|
|
8 |
|
|
|
|
9вывод MAX (7)
10Выход из Prim1 Результат 7 Входные данные: 17 3
Строка |
Ход выполнения |
x |
y |
|
|
|
|
3 |
вход в Prim1 |
? |
? |
4 |
|
17 |
3 |
5 |
(X > Y) (17 > 3) TRUE |
|
|
6 |
|
|
|
9вывод MAX (17)
10Выход из Prim1 Результат 17
1 PROGRAMPRIM2(INPUT,OUTPUT);
2 VAR X, Y, Z, MAX: INTEGER;
3 BEGIN
4 READ(X, Y, Z);
5IF X >YTHEN
6IF X > Z THEN
7MAX := X
8ELSE
9MAX := Z
10ELSE
11IFY> Z THEN
12MAX := Y
13ELSE
14MAX := Z;
15WRITE(MAX)
16END.
max
?
7
max
?
17
2
|
|
Таблица трассировки |
|
|
|
Входные данные: 4 |
7 5 |
|
|
|
|
Строка |
Ход выполнения |
x |
y |
z |
|
|
|
|
|
||
3 |
вход в Prim2 |
|
? |
? |
? |
4 |
|
|
4 |
7 |
5 |
5 |
(X > Y) (4 > 7) FALSE |
|
|
|
|
11 |
(Y> Z) (7 > 5) TRUE |
|
|
|
|
12 |
|
|
|
|
|
15вывод MAX (7)
16Выход из Prim1
Трассировка программы с циклом
1PROGRAM PRIM3 (INPUT,OUTPUT);
2VAR N, X, I, P, REZ: INTEGER;
3BEGIN
4READ (N, X);
5I := 1;
6REZ := 0;
7P := X;
8WHILE I <= N DO
9BEGIN
10REZ := REZ + P;
11P := P *X;
12I := I + 1
13END;
14WRITE(REZ)
15END.
|
|
Таблица трассировки |
|
|
|
Входные данные: 3 |
2 |
|
|
|
|
Строка |
Ход выполнения |
N |
X |
I |
|
|
|
|
|
||
3 |
вход в Prim3 |
|
? |
? |
? |
4 |
|
|
3 |
2 |
|
5 |
|
|
|
|
1 |
6 |
|
|
|
|
|
7 |
|
|
|
|
|
max
?
7
P |
REZ |
??
0
2
3
Строка |
Ход выполнения |
|
8 WHILE I <= N 1 <= 3 TRUE 10 11 12
8 WHILE I <= N 2 <= 3 TRUE 10 11 12
8 WHILE I <= N 3 <= 3 TRUE 10 11 12
8 WHILE I <= N 4 <= 3 FALSE
14вывод REZ(14)
15Выход из Prim3 Результат: 14
N
Математическое выпажение: xi
i 1
N |
X |
I |
P |
REZ |
2
4
2
6
8
3
14
16
4
Трассировка программы с вложенными циклами
1PROGRAMPRIM4(INPUT,OUTPUT);
2VAR N, i, j, REZ: INTEGER;
3BEGIN
4READ (N);
5REZ := 0;
6i := 1;
7WHILE i <= N DO
8BEGIN
9j := 1;
10WHILE j <= i DO
11BEGIN
12REZ := REZ + i * j;
13j := j + 1
14END;
4
15i := i + 1
16END;
17WRITE(REZ)
18END.
Таблица трассировки
Входные данные: 3
Строка |
Ход выполнения |
|
3 вход в Prim4
4
5
6
7 WHILE i <= N 1 <= 3 TRUE 9
10 WHILE j <= i 1 <= 1 TRUE 12 13
10 WHILE j <= i 2 <= 1 FALSE 15
7 WHILE i <= N 2 <= 3 TRUE 9
10 WHILE j <= i 1 <= 2 TRUE 12 13
10 WHILE j <= i 2 <= 2 TRUE 12 13
10 WHILE j <= i 3 <= 2 FALSE 15
7 WHILE i <= N 3 <= 3 TRUE 9
10 WHILE j <= i 1 <= 3 TRUE 12 13
10 WHILE j <= i 2 <= 3 TRUE 12 13
N |
i |
j |
REZ |
? |
? |
? |
? |
3
0
1
1
1
2
2
1
3
2
7
3
3
1
10
2
16
3
5
Строка |
Ход выполнения |
|
10 WHILE j <= i 3 <= 3 TRUE 12 13
10 WHILE j <= i 4 <= 3 FALSE 15
7 WHILE i <= N 4 <= 3 FALSE 17 вывод REZ(25)
15 Выход из Prim4
Результат: 25
N i
Математическое выражение: i j
i 1 j 1
N |
i |
j |
REZ |
25
4
4
6
Примеры трассировки программ с процедурами
1. Параметры передаются по значению
1PROGRAM Sampl1(Input, Output);
2VAR a, b, c: integer;
3PROCEDURE AddXY(x, y: integer);
4VAR c: integer;
5BEGIN
6x := x + 2;
7y := y + 5;
8c := (x + y) * 2
9END;
10BEGIN
11READ(a, b);
12c := a + b;
13AddXY(a, b);
14WRITE(a, ' ', b, ' ', c)
15END.
|
|
Таблица трассировки |
|
|
||
Входные данные: 2 |
3 |
|
|
|
|
|
Строка |
Ход выполнения |
a |
b |
c |
|
|
|
|
|||||
10 |
Вход в Sampl1 |
|
? |
? |
? |
|
11 |
|
|
2 |
3 |
|
|
12 |
|
|
|
|
5 |
|
13 |
Вызов AddXY |
|
|
|
x |
y |
5 |
Вход в AddXY |
|
|
|
2 |
3 |
6 |
|
|
|
|
4 |
|
7 |
|
|
|
|
|
8 |
8 |
|
|
|
|
|
|
9 |
Выход из AddXY |
|
|
|
|
|
14 |
Вывод a, b, c (2 |
3 5) |
|
|
|
|
15 |
Выход из Sampl1 |
|
|
|
|
|
Результат: 2 3 5
c (AddXY)
24
7
2. Параметры передаются по ссылке
1PROGRAM Sampl2(Input, Output);
2VAR a, b, c: integer;
3PROCEDURE AddXY(VAR x, y: integer);
4VAR c: integer;
5BEGIN
6x := x + 2;
7y := y + 5;
8c := (x + y) * 2
9END;
10BEGIN
11READ(a, b);
12c := a + b;
13AddXY(a, b);
14WRITE(a, ' ', b, ' ', c)
15END.
|
|
Таблица трассировки |
||
Входные данные: 2 |
3 |
|
|
|
Строка |
Ход выполнения |
a |
b |
|
|
||||
10 |
Вход в Sampl2 |
|
? |
? |
11 |
|
|
2 |
3 |
12 |
|
|
|
|
13 |
Вызов AddXY |
|
|
|
|
x |
y |
||
5 |
Вход в AddXY |
|
|
|
6 |
|
|
4 |
|
7 |
|
|
|
8 |
8 |
|
|
|
|
9 |
Выход из AddXY |
|
|
|
14 |
Вывод a, b, c (4 |
8 5) |
|
|
15 |
Выход из Sampl2 |
|
|
|
Результат: 4 8 5
c
?
5 c (AddXY)
24
8
3. Параметры передаются по значению и по ссылке
1PROGRAM Sampl3(Input, Output);
2VAR a, b, c: integer;
3PROCEDURE AddXY(VAR x: integer ; y: integer);
4VAR c: integer;
5BEGIN
6x := x + 2;
7y := y + 5;
8c := (x + y) * 2
9END;
10BEGIN
11READ(a, b);
12c := a + b;
13AddXY(b, a);
14WRITE(a, ' ', b, ' ', c)
15END.
Таблица трассировки
Входные данные: 2 3
Строка |
Ход выполнения |
|
|
10 |
Вход в Sampl3 |
11 |
|
12 |
|
13 |
Вызов AddXY |
5 |
Вход в AddXY |
6 |
|
7 |
|
8 |
|
9 |
Выход из AddXY |
14 |
Вывод a, b, c (4 8 5) |
15 |
Выход из Sampl2 |
Результат: 2 5 5
a b c
? ? ?
2 3
5 y
x
2
5
7
c (AddXY)
24
9
4. Использованиеглобальных переменных
1PROGRAM Sampl3(Input, Output);
2VAR a, b, c: integer;
3PROCEDURE AddXY(x, y: integer);
4BEGIN
5x := x + 2;
6y := y + 5;
7c := (x + y) * 2
8END;
9BEGIN
10READ(a, b);
11c := a + b;
12AddXY(a, b);
13WRITE(a, ' ', b, ' ', c)
14END.
Таблица трассировки
Входные данные: 2 3
Строка |
Ход выполнения |
|
|
9 |
Вход в Sampl1 |
10 |
|
11 |
|
12 |
Вызов AddXY |
4 |
Вход в AddXY |
5 |
|
6 |
|
7 |
|
8 |
Выход из AddXY |
13 |
Вывод a, b, c (2 3 24) |
14 |
Выход из Sampl1 |
Результат: 2 3 24
a |
b |
c |
? |
? |
? |
2 |
3 |
5 |
|
|
x y 2 3 4
8
24
10