Instituto Federal de Educação, Ciência e Tecnologia
Curso: Bacharelado em Ciência da Computação
Disciplina: Paradigmas de Linguagens
Professores: Walace de Almeida Rodrigues/Mário Luiz
Rodrigues Oliveira
Atividade: 3ª Lista de Exercícios
Formiga, MG, 6 de abril de 2014
INSTRUÇÕES
1. Esta lista de exercícios poderá ser resolvida em grupo com no máximo 3 integrantes.
2. Caso você ache que falta algum detalhe nas especificações, você deverá fazer as suposições
que julgar necessárias e escrevê-las com as suas respostas. Pode acontecer também de
algum enunciado conter dados e/ou especificações supérfluas para a solução de alguma
pergunta específica. Utilize sua capacidade de julgamento para separar o supérfluo do
necessário.
3. Entregue apenas uma resolução por grupo.
4. A data final para entrega desta lista de exercícios é o dia 11/04/2014, no início da aula.
5. Listas plagiadas serão desconsideradas, sendo atribuída nota 0 (zero) a todos os
envolvidos.
EXERCÍCIOS
1) Uma diferença significativa entre a definição de tipos primitivos em C e JAVA se refere ao
intervalo de valores de cada tipo. Enquanto na linguagem de programação JAVA os intervalos foram
fixados na definição da linguagem; na linguagem de programação C é a implementação do compilador
que define esses intervalos. Compare estas duas abordagens, justificando a opção de cada uma dessas
linguagens.
2) Muito embora a linguagem de programação JAVA seja fortemente influenciada pela linguagem C,
os projetistas de JAVA resolveram incluir o tipo boolean, o qual não existe em C. Apresente vantagens
e desvantagens da postura tomada pela linguagem C. Faça o mesmo em relação a linguagem JAVA.
3) A cardinalidade do tipo lógico (boolean) é dois. Sendo assim, é necessário apenas e tão somente um
único bit para representá-lo. No entanto, geralmente ele é armazenado numa posição de memória que
consome um byte ou até mesmo uma palavra de 4 bytes. Justifique essas escolhas.
4) Apresente funções que utilizem passagem de parâmetro por cópia (considere as 3 formas de
implementação: in, out e in-out) e passagem de parâmetro por definição. Em seguida compare esses
dois modos de passagem de parâmetros quanto à legibilidade, eficiência e facilidade de implementação
(para o projeto de um compilador).
Instituto Federal de Educação, Ciência e Tecnologia
Curso: Bacharelado em Ciência da Computação
Disciplina: Paradigmas de Linguagens
Professores: Walace de Almeida Rodrigues/Mário Luiz
Rodrigues Oliveira
Atividade: 3ª Lista de Exercícios
Formiga, MG, 6 de abril de 2014
5) Algumas linguagens não exigem declaração de tipos de variáveis. Quais as vantagens e
desvantagens dessa abordagem.
6) Algumas linguagens de programação, tais como: Pascal, Java e C++ exigem que uma variável seja
declarada antes de ser usada. Adicionalmente exigem que ao declarar uma variável seja associado à
mesma um tipo. Cite ao menos 2 argumentos que justifiquem essa exigência de tornar explícito o tipo
de uma variável no momento de sua declaração.
7) A linguagem de programação C considera a operação de atribuição como sendo uma expressão.
Apresente vantagens e desvantagens dessa abordagem.
8) Compare, em termos de legibilidade, as opções das linguagens de programação C e Pascal relativas
à localização das definições e declarações de variáveis.
9) Diferencie e exemplifique os 2 tipos de equivalência de tipos: por nome e estrutural.
10) Por que a verificação de tipos dos parâmetros de um subprograma é importante?
11) Responda V para as sentenças verdadeiras e F para sentenças falsas. Justifique suas respostas.
( ) Devemos evitar a passagem de parâmetro por valor para estruturas de dados compostas porque isso
pode tornar o programa ineficiente.
( ) É desejável que uma linguagem de programação elimine toda possibilidade de efeito colateral na
implementação das suas construções que introduzem abstrações.
( ) Projetistas de linguagens de programação costumam implementar somente a ordem de avaliação
normal para as chamadas de função, pois os outros esquemas de avaliação são mais complicados e
dificultam a legibilidade.
( ) Na linguagem de programação C é possível fazer tomada de decisão utilizando comando ou
utilizando expressão, o que representa um ganho na capacidade de escrita.
( ) As linguagens orientadas a expressão perdem em legibilidade porque permitem efeitos colaterais na
codificação das expressões.
( ) Na linguagem de programação C, durante a execução da expressão c = b, a variável c será amarrada
à variável b no escopo de avaliação do comando em que essa expressão faz parte.
( ) Só podemos implementar estruturas de dados que fazem uso de alocação de memória dinâmica em
linguagens de programação que trabalham com esquemas de escopo dinâmico.
( ) As linguagens de programação modernas usualmente combinam esquemas de amarração dinâmica
com esquemas de tipagem estática para atender as demandas dos programadores.
( ) Nas chamadas de funções recursivas os compiladores deixam de fazer novas amarrações, já que o
nome dos parâmetros será sempre o mesmo se a função chamada for sempre a mesma.
Instituto Federal de Educação, Ciência e Tecnologia
Curso: Bacharelado em Ciência da Computação
Disciplina: Paradigmas de Linguagens
Professores: Walace de Almeida Rodrigues/Mário Luiz
Rodrigues Oliveira
Atividade: 3ª Lista de Exercícios
Formiga, MG, 6 de abril de 2014
12) Em uma linguagem de programação, a ordem de avaliação dos parâmetros reais, durante a
passagem de parâmetros, pode ser: prévia, normal ou tardia. Considere o código na linguagem de
programação C abaixo e explique os resultados obtidos ao executá-lo considerando separadamente as 3
ordens de avaliação dos parâmetros. Unicamente para fins de resolução desse exercício, suponha que a
linguagem de programação C implemente as 3 ordens de avaliação citadas.
1. void avalia ( int c)
2. {
3.
int i;
4.
for ( i=0; i < 3; i++)
5.
{
6.
7.
printf (“%d\n”; c);
}
8. }
9. void main ()
10.
{
11.
int j=0;
12.
avalia (j++);
13.
}
13) Indique qual o valor será escrito pelo trecho de código seguinte considerando:
a) a linguagem de programação adotada usa amarração estática
b) a linguagem de programação adotada usa amarração dinâmica
c) cite e explique os problemas de legibilidade desse trecho de código quando se adota amarração
dinâmica e quando é adotada amarração estática
No código que se segue, considere os símbolos := como operador de atribuição. Suponha que a
execução do código inicie pelo procedimento comecar().
1. inteiro x := 5;
2. inteiro y := 10;
3. inteiro z := 15;
4.
5. procedimento sub1()
6. {
7.
escreva (x);
8.
escreva (y);
9.
escreva (z);
10.
escreva (“mais”);
11. }
12. procedimento sub2()
Instituto Federal de Educação, Ciência e Tecnologia
Curso: Bacharelado em Ciência da Computação
Disciplina: Paradigmas de Linguagens
Professores: Walace de Almeida Rodrigues/Mário Luiz
Rodrigues Oliveira
Atividade: 3ª Lista de Exercícios
Formiga, MG, 6 de abril de 2014
13. {
14.
inteiro x := 10;
15.
z := z – y;
16.
sub1();
17. }
18.
19. procedimento sub3()
20. {
21.
inteiro y := 20;
22.
sub2();
23. }
24.
25. procedimento comecar()
26. {
27.
inteiro x := 10;
28.
inteiro y := 15;
29.
inteiro z := 5;
30.
sub1();
31.
sub2();
32.
sub3();
33. }
MATÉRIA DA PROVA:
Critérios de avaliação de linguagens de programação, amarrações, valores e tipos de dados,
variáveis, comandos, expressões e abstrações.
Estudar o capítulo 1 (seção 1.3), capítulo 5 e o capítulo 6 do livro SEBESTA, ROBERT.
Conceitos de linguagens de programação. 9ª edição. Bookman, 2011.
Estudar os capítulos 1, 2, 3, 4, 5 e 6 do livro VAREJÃO, Flávio. Linguagens de programação:
conceitos e técnicas. Campus, 2004.
Estudar, também, pelo material (transparências) disponibilizado no portal MeuIfmg.
REFERENCIAS:
SEBESTA, ROBERT. Conceitos de linguagens de programação. 9ª edição. Bookman, 2011.
VAREJÃO, Flávio. Linguagens de programação: conceitos e técnicas. Campus, 2004.
Download

File - Ciência da Computação