Buscar

lista2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 3 páginas

Prévia do material em texto

1 
 
5185/31 e 6888/1– Paradigma de Programação Imperativa 
e Orientada a Objetos 
Profa. Valéria 
2ª Lista de Exercícios 
Cap.5 (Sebesta)/Cap.3 (Scott): Nomes, escopos e vinculações 
1. São três as questões de projeto referentes aos nomes usados em uma LP. Explique como cada um 
deles influencia na legibilidade dos programas. 
2. O que é tempo de vinculação? Exemplifique cinco tempos de vinculação diferentes. 
3. Qual(is) a(s) diferença(s) entre vinculação estática e vinculação dinâmica? Dê um exemplo de 
vinculação estática e um de vinculação dinâmica em uma LP imperativa. 
4. Cite quatro vinculações possíveis para uma variável em um programa imperativo. 
5. O conceito de tempo de vida de variáveis está relacionado à qual vinculação? 
6. O que determina se uma variável será alocada estaticamente, na pilha ou no heap? 
7. Para as linguagens C e Pascal, dê exemplos de variáveis estáticas, dinâmicas na pilha e dinâmicas no 
heap. 
8. Qual é o tempo de vida das variáveis (a) estáticas, (b) dinâmicas na pilha e (c) dinâmicas no heap? 
9. Cite uma linguagem que faz vinculação estática de tipos e uma que faz vinculação dinâmica de 
tipos. 
10. Por que as linguagens que fazem verificação dinâmica de tipos geralmente são interpretadas? 
11. O que significa dizer que uma linguagem é fortemente tipada? 
12. O que é coerção? 
13. Como as regras de coerção de uma linguagem influenciam seu sistema de tipos? 
14. Quando se pode dizer que ocorreu um erro de tipo? 
15. Qual a diferença entre tipos compatíveis e tipos equivalentes? 
16. Explique o conceito de escopo de um nome. 
17. Por que o escopo estático também é chamado de escopo léxico? 
18. Por que o uso de escopo dinâmico implica na verificação dinâmica de tipos? 
19. Cite um argumento em favor do escopo dinâmico. 
20. Dê dois exemplos usando a LP imperativa de sua preferência em que a variável está viva, mas fora 
de escopo . 
21. Quais são os dados geralmente armazenados em um registro de ativação (RA)? 
22. Explique a afirmação “O formato do registro de ativação é estático, porém seu tamanho é 
dinâmico”. 
23. No contexto de RAs, explique para que serve o link estático e o link dinâmico. 
24. Por que uma linguagem que não permite o aninhamento de subprogramas (por ex., uma função 
declarada no corpo de outra função) não precisa armazenar um link estático nos RAs? 
25. Para que serve o link dinâmico em uma LP de escopo estático? 
26. Por que geralmente apenas as variáveis estáticas são inicializadas implicitamente com “0”? 
27. Em C, qual a diferença de uma constante declarada como static const e uma declarada apenas 
como const? 
28. O que é ambiente de referenciamento e qual a sua relação com o tipo de escopo 
(estático/dinâmico)? 
 
 
Thiago
Highlight
2 
 
29. Considere o seguinte esqueleto de um programa em Pascal: 
program principal; 
 var x, y : integer; 
 procedure proc1; 
 var a: integer; 
 begin 
 proc2; 
 ... 
 end; (* proc1 *) 
 procedure proc2; 
 var a: real; 
 procedure proc21; 
 var y, z: real; 
 begin 
 ... 
 x := a + z; (* aqui *) 
 ... 
 end; (* proc21 *) 
 begin 
 proc21; 
 ... 
 end; (* proc2 *) 
 begin 
 ... 
 proc1; 
 ... 
 end; (* principal *) 
a. Qual a profundidade estática do programa principal e dos subprogramas declarados? 
b. Qual a profundidade de aninhamento/deslocamento de encadeamento de cada variável no 
comando de atribuição da linha comentada (* aqui *)? 
c. Quais declarações estão no ambiente de referenciamento do comando de atribuição 
comentado? 
d. Represente a situação da pilha de execução quando o procedimento proc21 está sendo 
executado, explicitando o encadeamento estático e o encadeamento dinâmico. 
30. Considere o esqueleto de programa abaixo, escrito em uma LP imperativa hipotética de escopo 
dinâmico: 
função fun1; 
var a, b: integer; 
begin 
 ... 
end; (* fun1 *) 
função fun2; 
var c: real; 
begin 
 ... 
 a := a + 1; (* aqui *) 
end; (* fun2 *) 
função main; 
var a, c, d: real; 
begin 
 ... 
end; (* main *) 
a. Qual é o tipo de “a” em fun2? 
b. Quais declarações estão no ambiente de referenciamento do comando de atribuição do ponto 
comentado (* aqui *) quando main chama fun1, que chama fun2? 
3 
 
31. Considere o seguinte fragmento de código escrito em C: 
{ int a, b, c; 
 ... 
 { int d, e; 
 ... 
 { int f; 
 ... 
 } 
 ... 
 } 
 ... 
 { int g, h, i; 
 ... 
 } 
 ... 
} 
a. Assumindo que cada inteiro ocupa 4 bytes, quantos bytes seriam necessários para armazenar 
as variáveis desse código? 
32. Considere o seguinte pseudocódigo: 
x : integer := 1 
y : integer := 2 
procedure add 
 x := x + y 
procedure second(P : procedure) 
 x : integer := 2 
 P() 
procedure first 
 y : integer := 3 
 second(add) 
first() 
write integer(x) 
a. O que esse programa imprime se a linguagem usar escopo estático? 
b. E se a linguagem usar escopo dinâmico?

Outros materiais