Вы находитесь на странице: 1из 5

Resoluo dos Exerccios do Captulo II

1. Liste pelo menos cinco diferentes tipos de amarraes que ocorrem no seguinte
trecho de cdigo C.
float j = 3.2;
j =j - 1.7;

A associao do intervalo correspondente ao tipo float (tempo de implementao


do tradutor).
A escolha do sinal = para denotar atribuio (tempo de projeto da linguagem).
A escolha do sinal para denotar subtrao (tempo de projeto da linguagem).
A escolha do sinal ; para denotar separao de comandos (tempo de projeto da
linguagem).
A associao dos sinais = e s respectivas funes de atribuio e subtrao
(tempo de compilao).
A associao de j ao tipo float (tempo de compilao).
A atribuio de 3.2 a varivel j (tempo de execuo).
A atribuio do resultado da expresso j 1.7 a j (tempo de execuo).
2. Especifique as regras de formao de identificadores de C, C++ e Java. Responda
ainda se existem limites no nmero mximo de caracteres que podem ser usados e
quais tipos de identificadores especiais so considerados.
C:
case sensitive
O primeiro caractere deve ser uma letra ou sublinhado
Os demais caracteres podem ser letras, dgitos ou sublinhado
Podem ter qualquer nmero de caracteres, mas somente os 31 primeiros so
significativos (isto , identificadores distintos tem de ter pelo menos um
caractere distinto dentre os 31 primeiros caracteres)
Possui vocbulos reservados (por exemplo, int, char, while) e vocbulos prdefinidos (por exemplo, printf, fopen, fclose)
C++:
case sensitive
O primeiro caractere deve ser uma letra ou sublinhado
Os demais caracteres podem ser letras, dgitos ou sublinhado
Podem ter qualquer nmero de caracteres, todos significativos
Possui vocbulos reservados (por exemplo, int, char, while) e vocbulos prdefinidos (por exemplo, new e delete)
JAVA:
case sensitive
O primeiro caractere deve ser uma letra ou sublinhado ou cifro
Os demais caracteres podem ser letras ou dgitos ou sublinhado ou cifro
Podem ter qualquer nmero de caracteres
Possui vocbulos reservados (por exemplo, true, boolean, try)

3. Considere o seguinte trecho de cdigo em ADA:


procedure A is
u : INTEGER;
procedure B is
v: INTEGER;
procedure C is
x . INTEGER;
procedure D is
u : INTEGER,
begin
null;
end D;
procedure E is
v: INTEGER,
begin
u : 7;
end E;
begin
null;
end C,
procedure F is
y: INTEGER;
procedure G is
x . INTEGER;
begin
null;
end G;
begin
u := 10;
end F;
begin
null;
end B;
begin
null;
end A;

Identifique quais variveis e subprogramas so visveis em cada um dos subprogramas


desse trecho de cdigo. Suponha que novos requisitos do problema demandem que a
varivel u de D possa ser acessada por G. Quais modificaes necessitariam ser feitas
no programa? Cite erros que poderiam ocorrer em situaes como essa.
Variveis:
A: u(A)
B: u(A) e v(B)
C: u(A), v(B) e x(C)
D: u(A), v(B), x(C) e u(D) (u(A) acessado atravs de referncia seletiva A.u)
E: u(A), v(B), x(C) e v(E) (v(B) acessado atravs de referncia seletiva B.v)
F: u(A), v(B) e y(F)
G: u(A), v(B), y(F) e x(G)
Subprogramas:
A: B
B: A, B, C e F

C: A, B, C, D, E e F
D: A, B, C, D, E e F
E: A, B, C, D, E e F
F: A, B, C, F e G
G: A, B, C, F e G
Para referenciar a varivel u do subprograma D em G seria necessrio defin-la em B.
A varivel u de D tambm passaria a ser visvel pelos subprogramas B, C, E e F, o que
pode ser indesejado. Isso poderia provocar erros de alterao indevida dessa varivel
nesses subprogramas.

4. Indique qual valor ser escrito pelo trecho de cdigo seguinte no caso da
linguagem de programao utilizada adotar escopo esttico e no caso dela adotar
escopo dinmico.
procedimento sub () {
inteiro x = 1;
inteiro y = 1;
procedimento sub1() {
se (x = 1 &y = 1,) ento
sub2();
seno
sub3();
}
procedimento sub2() {
inteiro x = 2;
y = 0;
sub1(),
}
procedimento sub3() {
escreva(x):
}
sub 1();
}
Cite e explique os problemas de legibilidade do trecho de cdigo acima quando se
adota o escopo esttico e o escopo dinmico.
Escopo esttico: 1
Escopo dinmico: 2
No escopo dinmico, ao chamarmos a funo sub3 depois de sub2 ser executada, a
funo far referncia ao x criado em sub2. Por isso imprimir o valor 2. J no escopo
esttico sub3 ir referenciar o valor de x em sub e imprimir o valor 1.
No escopo dinmico temos que analisar a seqncia em que os subprogramas so
chamados para determinar o valor das variveis que no so locais. preciso mais
cuidado e ateno por parte do programador ao manipular essas variveis.

O escopo esttico bem mais legvel, pois no necessrio seguir a cadeia de


chamadas das funes para conhecer o valor de uma varivel no local, tornando o
entendimento do cdigo menos confuso.

5. Compare, em termos de legibilidade, as opes de C e C++ relativas localizao


das definies e declaraes nos programas.
Em C, definies e declaraes devem ser feitas globalmente ou no incio de um bloco
de cdigo. Em C++, elas podem ser feitas globalmente ou em qualquer ponto de um
bloco de cdigo. Como variveis globais possuem a mesma regra de localizao, a
comparao realizada aqui se refere s declaraes e definies no globais. Enquanto
a opo de C++ possibilita a colocao das definies e declaraes bem prximas do
local de seu uso, ela eventualmente pode ser mais difcil de ser encontrada, uma vez
que pode estar localizada em qualquer ponto do bloco de cdigo antes de seu primeiro
uso. Por sua vez, a opo de C fixa o local onde as declaraes e definies podem ser
encontradas, facilitando a busca. Contudo, esse local pode ser bem distante do ponto
de uso, o que pode dificultar a leitura.

6. Identifique o problema que ocorre no seguinte trecho de cdigo C. Explique


porque ele ocorre e indique como poderia ser resolvido.
void circulo () {
#define pi 3.14159
float raio = 3;
float area = pi * raio * raio;
float perimetro = 2 * pi * raio;
}
void pressao () {
float pi = 3.2, pf = 5.3;
float variacao;
variacao = pf - pi;
}
Quando o programa compilado, o pr-processador encontra cada ocorrncia da
palavra pi, aps o define, e a substitui por 3.14159. Isto causar erro na presso. As
palavras pi sero substitudas por uma constante, o que no deveria ter sido feito, pois
a inteno era a criao de uma varivel de nome pi (representando presso interna).
Para resolver este problema pode-se utilizar a definio const em vez de define.
Uma definio atravs de const obedece a regras de escopo (a constante ser
reconhecida do ponto de definio at o final do subprograma na qual foi definida).

7. Indique quais valores sero escritos pelo seguinte programa em C. Explique sua
resposta e discuta a postura da linguagem em termos de ortogonalidade e de
potencialidade para induo de erros de programao.

int i;
void main () {
printf(%d\n", i);

f();
}
void f () {
int i;
printf(%d\n ", i);
}
A varivel i foi definida como global. Automaticamente ela ser inicializada com o
valor 0 (zero). Portanto, na execuo da funo main, o primeiro valor a ser impresso
0 (zero). Contudo, quando a funo f chamada, cria-se uma varivel local i na
memria. Variveis locais em C no so inicializadas automaticamente. Assim, a
impresso desta varivel ser o contedo corrente da rea de memria aonde ela foi
alocada.
Isso caracteriza uma falta de ortogonalidade na linguagem, o que pode levar a erros de
programao, visto que o programador pode achar que uma varivel, seja global ou
local, ser sempre inicializada automaticamente com zero.

8. Uma declarao de funo um segmento de cdigo contendo apenas a sua


assinatura (isto , um segmento de cdigo com o cabealho da funo, mas sem
seu corpo). Apresente uma situao na qual a declarao de funes til (ou
necessria) em C. Justifique sua resposta explicando para que o compilador utiliza
a declarao.
Uma situao na qual a declarao de funes necessria ocorre quando se deseja
compilar um arquivo que utiliza funes definidas em outro arquivo j compilado ou
que ser compilado posteriormente. Nesse caso, as declaraes so necessrias para
que o compilador possa verificar se as chamadas das funes so consistentes com os
tipos requeridos em sua assinatura.

Вам также может понравиться