Diagramas de Execução
Prof. Marcelo
Diagramas de Execução



Consiste em uma simulação da execução de um
programa de maneira sistemática
Serve para mostrar a relação entre o código-fonte
e a execução dinâmica
Trata-se de uma notação que torna a semântica
da LP mais clara, em especial



as regras de escopo
as chamadas de procedimentos
a passagem de parâmetros
Diagramas de Execução




Sua finalidade é melhorar a compreensão dos
conceitos
Nenhuma definição formal é dada para os
diagramas de execução
É possível desenvolver um formalismo adequado
para a notação e relacioná-la com a sintaxe,
obtendo-se um método para especificar a
semântica de uma LP
As simulações podem ser programadas para
computador
Diagramas de Execução



Um código-fonte é um objeto que possui uma
estrutura descrita pela árvore de derivação
Está árvore de derivação é o resultado das
construções sintáticas de uma LP
O escopo de uma definição é a região onde esta
definição se aplica. Em geral pode ser


Global – acessada em qualquer ponto do programa
Local – acessada apenas no ponto em que foi definida
Diagramas de Execução



A simulação de um programa na notação
de diagramas de execução é feita por
meio de retângulos encaixados
Cada retângulo indica o início ou ativação
de um procedimento
Um retângulo só é completado quando
encerrar-se a simulação da execução da
ativação do procedimento
Diagramas de Execução
program exemplo();
var m, n, s: integer;
begin
read(m,n);
s:= 0;
while m <= n
do begin
s:= s+m*m;
write(m,s);
m:= m+1;
end
end.
Diagramas de Execução
Supondo que os valores lidos para m e n
sejam, respectivamente, 5 e 6, temos o
diagrama de execução a seguir
Diagramas de Execução
exemplo
m: 5
n: 6
s: 0
m, n, s: integer / read(m,n) / s:= 0;
Diagramas de Execução
exemplo
m: 5
n: 6
s: 0, 25
s:= s+m*m;
Diagramas de Execução
exemplo
m: 5
n: 6
s: 0, 25
5, 25
write(m,s);
Diagramas de Execução
exemplo
m: 5, 6
n: 6
s: 0, 25
5, 25
m:= m+1;
Diagramas de Execução
exemplo
m: 5, 6
n: 6
s: 0, 25, 61
5, 25
s:= s+m*m;
Diagramas de Execução
exemplo
m: 5, 6
n: 6
s: 0, 25, 61
5, 25
6, 61
write(m,s);
Diagramas de Execução
exemplo
m: 5, 6, 7
n: 6
s: 0, 25, 61
5, 25
6, 61
m:= m+1;
Diagramas de Execução
exemplo
m: 5, 6, 7
n: 6
s: 0, 25, 61
5, 25
6, 61
end.
Diagramas de Execução



A parte superior do retângulo contem os valores
dos parâmetros e das variáveis locais
Os valores sucessivos para cada parâmetro ou
variável é o resultado da execução de comandos
de atribuição e de E/S
Se um procedimento q for chamado dentro de
outro procedimento p, então o registro de ativação
de q será encaixado no registro de p
Diagramas de Execução
program exemplo2();
var n, s, i: integer;
procedure soma;
var q: integer;
begin
q:= i*i;
if (i div 2)*2 = i
then s:= s+q
else s:= s-q
end
begin
read(n);
s:= 0; i:= 0;
while i <= n
do begin
soma; write(s); i:= i+1;
end
end.
Diagramas de Execução
Supondo que os valores lidos para n seja 2,
temos o diagrama de execução a seguir
Diagramas de Execução
exemplo 2
s: 0
n: 2
i: 0
n, s, i: integer / read(n) / s:= 0; / i:= 0;
Diagramas de Execução
exemplo 2
s: 0, 0
n: 2
i: 0
soma
q: 0
soma;
Diagramas de Execução
exemplo 2
s: 0, 0
n: 2
i: 0
soma
q: 0
0
write(s);
Diagramas de Execução
exemplo 2
s: 0, 0
n: 2
i: 0, 1
soma
q: 0
0
i:= i+1;
Diagramas de Execução
exemplo 2
s: 0, 0, -1
n: 2
i: 0, 1
soma
q: 0
0
soma
q: 1
soma;
Diagramas de Execução
exemplo 2
s: 0, 0, -1
n: 2
i: 0, 1
soma
q: 0
0
soma
q: 1
-1
write(s);
Diagramas de Execução
exemplo 2
s: 0, 0, -1
n: 2
i: 0, 1, 2
soma
q: 0
0
soma
q: 1
-1
i:= i+1;
Diagramas de Execução
exemplo 2
s: 0, 0, -1, 3
n: 2
i: 0, 1, 2
soma
q: 0
0
soma
q: 1
-1
soma
q: 4
soma;
Diagramas de Execução
exemplo 2
s: 0, 0, -1, 3
n: 2
i: 0, 1, 2
soma
q: 0
0
soma
q: 1
-1
soma
q: 4
write(s);
3
Diagramas de Execução
exemplo 2
s: 0, 0, -1, 3
n: 2
i: 0, 1, 2, 3
soma
q: 0
0
soma
q: 1
-1
soma
q: 4
i:= i+1;
3
Diagramas de Execução
exemplo 2
s: 0, 0, -1, 3
n: 2
i: 0, 1, 2, 3
soma
q: 0
0
soma
q: 1
-1
soma
q: 4
end.
3
Diagramas de Execução
Monte um diagrama de execução para o
programa a seguir
Diagramas de Execução
program exercicio();
var z, t: integer;
procedure g(t: integer);
var x: integer;
begin
t:= 2*t; x:= 2*t; z:= x+1;
end
begin
z:= 3; t:= 4;
g(t); write(z,t);
g(z); write(z,t);
g(z+t); write(z,t);
g(7); write(z,t);
end.
Diagramas de Execução

Quando em um programa, existem várias
chamadas a um mesmo procedimento,
costuma-se adotar uma das seguintes
alternativas


Numerar seqüencialmente cada diagrama de
execução do procedimento chamado
Indicar os valores dos parâmetros que estão
sendo passados para o procedimento
Diagramas de Execução
s: 0, 0, -1
n: 2
i: 0, 1, 2
soma
q: 0
(1)
0
soma
q: 1
(2)
-1
end.
Diagramas de Execução


Quando o mesmo procedimento for
chamado em diversas partes do programa,
costuma-se indicar, por meio de uma
flecha, qual o registro de ativação
(diagrama de execução) que realizou a
chamada
Ou então, utiliza-se uma flecha pontilhada
indicando qual o escopo está sendo
referenciado dentro da função
Diagramas de Execução
s: 0, 0, -1
n: 2
i: 0, 1, 2
soma
q: 0
(1)
0
soma
q: 1
(2)
-1
end.
Diagramas de Execução
Faça o diagrama de execução para o
programa a seguir
Diagramas de Execução
int z,x;
void g(int t) {
int y;
y= t*t; z= z+x+y; cout << z;
}
void f(int y){
int t;
t= z+x+y; g(t); z= t;
}
void h(int y) {
int x;
x= y+1; f(x); g(z+x);
}
void main() {
z= 1; x= 3; h(x); g(x);
cout << x,z;
}
Diagramas de Execução


Para os parâmetros passados por
referência, indica-se qual o registro de
ativação que provém a variável passada
como parâmetro efetivo por meio de uma
flecha indicando QUAL VARIÁVEL está
sendo referenciada
O valor de retorno de uma função aparece
ao lado do nome da função, separado por
uma barra
Diagramas de Execução
int fat(int n) {
if (n == 0) return 1;
else return (n * fat(n-1));
}
void main() {
cout << “fat(3)= “ << fat(3);
}
Diagramas de Execução
main
fat(3)/
n: 3
fat(3)=
Diagramas de Execução
main
fat(3)/
n: 3
fat(2)/
n: 2
fat(3)=
Diagramas de Execução
main
fat(3)/
n: 3
fat(2)/
n: 2
fat(1)/
n: 1
fat(3)=
Diagramas de Execução
main
fat(3)/
n: 3
fat(2)/
n: 2
fat(1)/
n: 1
fat(0)/1
n: 0
fat(3)=
Diagramas de Execução
main
fat(3)/
n: 3
fat(2)/
n: 2
fat(1)/1
n: 1
fat(0)/1
n: 0
fat(3)=
Diagramas de Execução
main
fat(3)/
n: 3
fat(2)/2
n: 2
fat(1)/1
n: 1
fat(0)/1
n: 0
fat(3)=
Diagramas de Execução
main
fat(3)/6
n: 3
fat(2)/2
n: 2
fat(1)/1
n: 1
fat(0)/1
fat(3)=
n: 0
fat(3)= 6
Download

DiagramaExec - Facom-UFMS