Baixe o app para aproveitar ainda mais
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.
Compartilhar