Buscar

Exercícios de Programação Imperativa e Orientada a Objetos

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes

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ê também pode ser Premium ajudando estudantes
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 
3ª Lista de Exercícios 
Cap.7 e 8 (Sebesta)/Cap.6 (Scott): Fluxo de controle 
1. Qual o valor das expressões posfixas abaixo? 
a) 5 3 + 6 * 2 1 + / 
b) 1 2 + 3 4 - + 5 6 + 7 8 - - * 
2. Qual a tradução correta para a forma posfixa das expressões infixas abaixo? 
a) ( a * b ) + ( c * d ) 
b) ( a * b + ( c + d ) ) * ( e + f ) 
3. Traduza a expressão abaixo para (a) notação prefixada e (b) notação posfixada. Será preciso usar 
um símbolo especial para o “menos” (–) unário? 
[− b + sqrt(b * b − 4 * a * c)]/(2 * a) 
4. Escreva um pseudocódigo que use o operador ternário do C para imprimir, dentre dois números 
lidos, o maior deles. 
5. Escreva um código C que lê um número inteiro e imprima se o número é par ou impar usando 
apenas o operador ternário como modificador do fluxo de controle. 
6. O que é um efeito colateral no contexto de LPs? 
7. Dê um exemplo que explicite a diferença entre uma LP que implementa as variáveis por valor e 
uma que implementa as variáveis por referência. 
8. Linguagens que implementam variáveis por referência também tendem a implementar um “coletor 
de lixo automático”. Isso é só uma coincidência? Explique. 
9. Dado o código C abaixo, mostre em que situação o programa imprime a mensagem “falso”. 
#include <stdio.h> 
int main(){ 
 int a, b; 
 scanf("%d%d", &a, &b); 
 if (a = b) 
 printf("verdadeiro"); 
 else 
 printf("falso"); 
 return 0; 
} 
10. Indique qual dos dois pseudocódigos “assembly” abaixo implementa uma avaliação curto-circuito. 
a) r1 := A 
 r2 := B 
 r1 := r1 = r2 
 r2 := A 
 r3 := B 
 r2 := r2 > r3 
 r3 := C 
 r4 := A 
 r3 := r3 > r4 
 r2 := r2 & r3 
 r1 := r1 | r2 
 if r1 = 0 goto L2 
L1: clausula_then 
 goto L3 
L2: clausula_else 
L3: ... 
b) r1 := A 
 r2 := B 
 if r1 = r2 goto L1 
 r1 := A 
 r2 := B 
 if r1 <= r2 goto L2 
 r1 := C 
 r2 := A 
 if r1 <= r2 goto L2 
L1: clausula_then 
 goto L3 
L2: clausula_else 
L3: ... 
 
2 
 
 
11. Escreva a expressão booleana corresponde aos códigos do exercício anterior. 
12. Para expressão booleana abaixo, escreva dois pseudocódigos “assembly” para a avaliação da 
expressão: um passível de ser gerado por um compilador C e outro passível de ser gerado por um 
compilador Pascal. 
(A = B) OR (A > C) OR ((A > B) AND (C > B)) 
13. Considere o código C abaixo: 
int fun(int *i) { 
 *i += 5; 
 return 4; 
} 
void main(){ 
 int x = 3; 
 x = x + fun(&x); 
} 
Qual seria o valor de x depois do comando de atribuição em main, assumindo que: 
a) Os operandos são avaliados da esquerda para a direita; 
b) Os operandos são avaliados da direita para a esquerda. 
14. Por que algumas linguagens determinam a ordem de avaliação dos operandos enquanto outras 
deixam a escolha da ordem de avaliação por conta do compilador? Cite um argumento a favor da 
ordem fixa e um a favor da ordem flexível (o compilador decide). 
15. Os pseudocódigos “assembly” têm por objetivo explicitar a semântica dos comandos de fluxo de 
controle. Para cada um dos pseudocódigos abaixo, escreva o pseudocódigo em alto nível (ou o 
código usando a LP de sua preferência) correspondente. 
a) r1 := 1 
 goto L2 
L1: lista_instruções 
 r1 += 1 
L2: if r1 <= 10 goto L1 
L3: ... 
 
b) r1 := a 
L1: lista_instruções 
 if r1 <= 5 goto L1 
L2: ... 
 
c) r1 := a 
L1: if r1 <= 5 goto L2 
 lista_instruções 
 goto L1 
L2: ... 
 
d) r1 := A 
 r2 := B 
 if r1 <= r2 goto L2 
 r1 := C 
 r2 := A 
 if r1 <= r2 goto L1 
 lista_instruções_1 
 goto L2 
L1: lista_instruções_2 
L2: ... 
 
e) r1 := i 
 if r1 < 1 goto L5 
 if r1 > 6 goto L5 
 r1 += 1 
 r2 := L1[r1] 
 goto *r2 
L1: &L2 
 &L3 
 &L3 
 &L5 
 &L4 
 &L4 
L2: lista_instruções_1 
 goto L5 
L3: lista_instruções_2 
 goto L5 
L4: lista_instruções_3 
L5: ... 
 
f) r1 := i 
 if r1 = 3 goto L2 
 if r1 = 5 goto L3 
 if r1 != 1 goto L4 
L1: lista_instruções_1 
L2: lista_instruções_2 
L3: lista_instruções_3 
L4: ... 
 
 
 
3 
 
16. Todo comando case pode ser simulado por meio de ifs encadeados. Sendo assim, por que 
muitas LPs incluem algum tipo de case? 
17. Para os comandos for abaixo, escritos em Pascal (a) e em C (b), quantas vezes cada laço irá 
executar? Caso os valores sejam diferentes, explique por que. 
a) inicio :=1; 
fim := 10; 
for i:=inicio to fim do 
begin 
 readln(a[i]); 
 inc(inicio); 
 dec(fim) 
end; 
b) inicio = 1; 
fim = 10; 
for (i = inicio; i <= fim; i++){ 
 scanf(“%c”, a[i]); 
 inicio++; 
 fim--; 
} 
 
18. O que significa dizer que um laço é pós-teste? E pré-teste? 
19. Dê um exemplo usando a LP de sua preferência em que se use recursão em substituição a iteração.

Outros materiais