Buscar

Prova 2

Prévia do material em texto

MAT A 56 Paradigmas de Linguagens de Programação – 2ª Prova
Aluno:
Program teste
 var x,y,z;
 procedure bar(a,b,c)
 begin
 a:=x+9;
 b:=x+c;
 c:=y;
 x:=1;
 y:=2;
 end;
begin
 x:= 1;
 y:= 7;
 z:= 11;
 bar(x,y,z);
 writeln(x,y,z);
 end;
Questão 1 (1,5 pontos) Passagem de Parâmetros
Quais valores serão impressos pelo programa teste se a passagem de 
parâmetros for:
1. por valor (0,5)
2. por referência (0,5)
3. por valor resultado (0,5)
Questão 2 (2,5 pontos) Organização e semântica de LPs – Registro de 
Ativação
Escreva a pilha de registros de ativação para o programa abaixo no momento 
em que WRITELN(A,B,C) é chamado na linha 7. Considere que o escopo das 
referências é estático e os links para as variáveis não locais também são feitos 
de forma estática. Assuma que as únicas informações salvas durante a 
chamada as rotinas são o link dinâmico, o endereço de retorno, e o link estático (como visto em sala de aula).
1. PROGRAM MAIN()
2. VAR A: INTEGER; 
3. VAR B: INTEGER; 
4. VAR C: INTEGER;
5. PROCEDURE U 
6. BEGIN {U}
7. WRITELN(A,B,C); <<<<<<<<<<<<<<<<<<<<<
8. END {U}
9. PROCEDURE R 
10. VAR A;
11. PROCEDURE S
12. VAR B: INTEGER
13. BEGIN {S}
14. IF (C>0) THEN
15. BEGIN
16. A := A + C;
17. C := C – 1;
18. S();
19. END
20. ELSE
21. BEGIN
22. B := A*A; 
23. U();
24. END 
25. END {S}
26. BEGIN {R}
27. A := B;
28. S(); 
29. END {R}
30. BEGIN {MAIN}
31. C:= 2;
32. B:= 1;
33. A:= 3; 
34. R();
35. END {MAIN}
Questão 3 (1,0 ponto) Escopos de Referências a Variáveis não Locais
Escreva o código assembler para a declaração < A:=A+C> da linha 16 do programa dado na questão anterior. 
Assuma o mesmo escopo estático e utilize a notação dada em sala de aula:
➉
LD reg,(Mem+N) – carrega no registrador o endereço apontado por Mem mais o N.
➉
ST (Mem+N), reg – armazena no endereço apontado por Mem + N o conteúdo do registrador.
➉
ADD reg, N – soma o número N ao conteúdo do registrador reg e armazena o resultado no próprio reg.
O topo do registro de ativação atual está apontado pelo registrador FP.
Questão 4 (1,5 pontos) Miscelânea
(0,5) Cite três razões porque tipos são necessários.
(0,5) Qual a principal razão para se ter vinculação dinâmica de tipos a variáveis.
(0,5) Quais os valores impressos na linha 7 da Questão 2, se o escopo das variáveis fosse dinâmico.
Questão 5 (1,5) Arranjos
Discuta pelo menos três categorias diferentes de arranjos. Comentando sobre seus índices, sua estratégia de alocação, 
e dando exemplo em uma linguagem de programação do seu conhecimento.
Questão 6 (2 pontos) Tempo de vida e escopo de variáveis
Considere o fragmento de código C abaixo. 
int m, z;
void S(int m) {
 z = z + 3*m;
}
void R (int n) {
 if (n>0) {
 R(n-1);
 m := m+3;
 S(n);
 }
}
int main() {
 m = 3;
 z = 0;
 R(m);
 return 1;
}
Seguindo a execução do programa abaixo, liste a ativação de cada rotina, o tempo de vida (nascimento e morte), 
valor e escopo de cada variável.

Continue navegando