apostila
259 pág.

apostila

Disciplina:Algoritmos e Estrutura de Dados I542 materiais7.956 seguidores
Pré-visualização50 páginas
(Na˜o use multiplicac¸a˜o. Apenas operac¸o˜es
de soma):

1 x N

2 x N

3 x N

4 x N

5 x N

Isto e´, suponha que N=3. Enta˜o a sa´ıda deve ser:

3

6

9

12

15

Outro exemplo, para N=6

6

12

18

24

30

4. Dado um nu´mero inteiro que representa uma quantidade de segundos, determi-
nar o seu valor equivalente em graus, minutos e segundos. Se a quantidade de
segundos for insuficiente para dar um valor em graus, o valor em graus deve ser
0 (zero). A mesma observac¸a˜o vale em relac¸a˜o aos minutos e segundos. Por
exemplo: 3.600 segundos = 1 grau, 0 minutos, 0 segundos. ; 3.500 segundos =
0 graus, 58 minutos e 20 segundos.

5. Dadas duas frac¸o˜es ordina´rias a/b e c/d, determinar a sua soma e o seu produto,
no formato de frac¸o˜es. A entrada de dados deve ser constitu´ıda de duas linhas,
cada uma contendo dois inteiros, uma para a e b outra para c e d. A sa´ıda
devera´ ser tambe´m de duas linhas cada uma contendo um par que representa o
numerador e o denominados da soma e produto calculadas.

50 CAPI´TULO 5. CONCEITOS ELEMENTARES

6. Ler uma sequeˆncia de N nu´meros e imprimir a me´dia aritme´tica.

7. Calcular o produto dos nu´meros ı´mpares de N1 a N2 (incluindo ambos), onde
N1 ≤ N2 sa˜o lidos do teclado.

8. Calcule o valor da soma dos quadrados dos primeiros 50 inteiros positivos na˜o
nulos.

9. Ler uma massa de dados onde cada linha conte´m um nu´mero par. Para cada
nu´mero lido, calcular o seu sucessor par, imprimindo-os dois a dois em listagem
de sa´ıda. A u´ltima linha de dados conte´m o nu´mero zero, o qual na˜o deve ser
processado e serve apenas para indicar o final da leitura dos dados.

10. Ler uma massa de dados onde cada linha conte´m um valor nume´rico do tipo
real. O programa deve calcular a me´dia aritme´tica dos diversos valores lidos,
imprimindo cada valor lido e, ao final, a me´dia calculada. A u´ltima linha de
dados conte´m o u´nico nu´mero zero. Este zero na˜o deve ser considerado no
ca´lculo da me´dia.

11. Ler uma massa de dados contendo a definic¸a˜o de va´rias equac¸o˜es do segundo
grau da forma Ax2 + Bx + C = 0. Cada linha de dados conte´m a definic¸a˜o de
uma equac¸a˜o por meio dos valores de A, B e C do conjunto dos nu´meros reais. A
u´ltima linha informada ao sistema conte´m 3 (treˆs) valores zero (exemplo 0.0 0.0
0.0). Apo´s a leitura de cada linha o programa deve tentar calcular as duas ra´ızes
da equac¸a˜o. A listagem de sa´ıda, em cada linha, devera´ conter sempre os valores
de A, B e C lidos, seguidos dos valores das duas ra´ızes reais. Considere que o
usua´rio entrara´ somente com valores A, B e C tais que a equac¸a˜o garantidamente
tem duas ra´ızes reais.

12. Dados dois nu´meros inteiros positivos determinar quantas vezes o primeiro di-
vide exatamente o segundo. Se o primeiro na˜o divide o segundo o nu´mero de
vezes e´ zero.

13. Fac¸a um programa em Pascal que imprima exatamente a sa´ıda especificada na
figura 1 (abaixo) de maneira que, em todo o programa, na˜o aparec¸am mais do
que treˆs comandos de impressa˜o.

14. Fac¸a um programa em Pascal que imprima exatamente a mesma sa´ıda solicitada
no exerc´ıcio anterior, mas que use exatamente dois comandos de repetic¸a˜o.

15. Fac¸a um programa em Pascal que receba dois nu´meros inteiros N e M como
entrada e retorne como sa´ıda N MOD M usando para isto apenas operac¸o˜es de
subtrac¸a˜o. O seu programa deve considerar que o usua´rio entra com N sempre
maior do que N .

16. Adapte a soluc¸a˜o do exerc´ıcio anterior para que a sa´ıda seja exatamente con-
forme especificada na figura 2 (abaixo).

5.10. EXERCI´CIOS 51

17. Fac¸a um programa em Pascal que receba uma massa de dados contendo o saldo
banca´rio de alguns clientes de um banco e imprima aqueles que sa˜o negativos.
O u´ltimo saldo, que na˜o corresponde a nenhum cliente (e portanto na˜o deve ser
impresso), conte´m o valor –999.999,99.

1

121

12321

1234321

123454321

12345654321

1234567654321

123456787654321

12345678987654321

Figura 1

1

121

12321

1234321

123454321

12345654321

1234567654321

123456787654321

12345678987654321

Figura 2

18. Para cada uma das expresso˜es aritme´ticas abaixo, determine o tipo de dados
da varia´vel que esta´ no lado esquerdo do comando de atribuic¸a˜o bem como o
resultado da expressa˜o que esta´ no lado direito:

(a) A := 1 + 2 ∗ 3;
(b) B := 1 + 2 ∗ 3/7;
(c) C := 1 + 2 ∗ 3 DIV 7;
(d) D := 3 DIV 3 ∗ 4.0;
(e) E := A+B ∗ C −D

19. Indique qual o resultado das expresso˜es abaixo, sendo:
a=6; b=9.5; d=14; p=4; q=5; r=10; z=6.0 ; sim= TRUE

• ((z/a)+b*a)-d DIV 2
• p*(r MOD q)-q/2
• NOT sim AND (z DIV y + 1 = x)
• (x + y > z) AND sim OR (y >= x)

20. Indique qual o resultado das expresso˜es abaixo, sendo:
a=5; b=3; d=7; p=4; q=5; r=2; x=8; y=4; z=6; sim=TRUE

(a) (z DIV a + b * a) - d DIV 2

(b) p / r MOD q - q / 2

(c) (z DIV y + 1 = x) AND sim OR (y >= x)

21. Escrever um programa em Pascal que leia do teclado uma sequeˆncia de nu´meros
inteiros ate´ que seja lido um nu´mero que seja o dobro ou a metade do anterior-
mente lido. O programa deve imprimir na sa´ıda os seguintes valores:

52 CAPI´TULO 5. CONCEITOS ELEMENTARES

• a quantidade de nu´meros lidos;
• a soma dos nu´meros lidos;
• os dois valores lidos que forc¸aram a parada do programa.

Exemplos:

Entrada

-549 -716 -603 -545 -424 -848

Saı´da

6 -3685 -424 -848

Entrada

-549 -716 -603 -545 -424 646 438 892 964 384 192

Saı´da

11 679 384 192

22. Escreva um programa que troque o conteu´do de duas varia´veis inteiras sem
utilizar varia´veis auxiliares.

23. Escreva em Pascal as seguintes expresso˜es aritme´ticas usando o mı´nimo poss´ıvel
de pareˆnteses:

(a) W
2

Ax2+Bx+C

(b)
P1+P2
Y−Z R
W
AB

+R

24. Tente compilar este programa. Procure descobrir qual(is) e´ (sa˜o) o(s) erro(s) e
corrigi-lo(s).

(∗ programa que le um numero e retorna o ultimo algarismo ∗)
(∗ escrito por Marcos Castilho em 22/10/2002, com erros . ∗)

program ultalgarismo ;
begin

read (A)
writeln (A mod 10, A div 10) ;

end.

25. Seja o seguinte programa em Pascal :

program Misterio ;
var nota1 ,nota2 ,media: integer ;
begin

readln(nota1 ,nota2)
while nota1 <> 0 do

media:=nota1+nota2/2;
writeln(nota1 ,nota2 ,media) ;
readln(nota1 ,nota2) ;

end.

5.10. EXERCI´CIOS 53

(a) Quantos sa˜o, e quais sa˜o, os erros de compilac¸a˜o deste programa?

(b) Considerando que voceˆ corrigiu os erros de compilac¸a˜o corretamente, o que
faz este programa?

(c) Considerando a estrutura do programa, os nomes das varia´veis e a en-
dentac¸a˜o usada, podemos afirmar que o programador cometeu alguns erros
de lo´gica. Quantos sa˜o e quais sa˜o estes erros?

(d) O que faz o programa faz apo´s estas correc¸o˜es?

26. Enumere e explique todos os erros contidos no seguinte co´digo Pascal :

program misterio2 ;
var

m, g: real ;
N1, N2: integer ;

begin
readln(N1, N2) ;
i f (N1 > N2) then

m := N2
else

m := N1;
g:= 1;
while g do
begin

if (N1 mod m = 0) AND (N2 mod m = 0) then
g := 0;

else
m := m− 1;

end;
i f (m := N1) then

writeln(’O valor resultante eh: ’ m) ;
end.

27. Dado o programa abaixo, mostre o acompanhamento de sua execuc¸a˜o para treˆs
valores de entrada (valores pequenos). Em seguida, descreva o que o programa
faz, comprovando suas afirmac¸o˜es.

program questao1(input , output) ;
var

x: integer ;
y, m: longint ;

begin
read(x) ;
y := 0;
m := 1;
while x > 0 do

begin
y := y + (x mod 2) ∗ m;
x := x div 2;
m := m ∗ 10;

end;
writeln(y)

end.

54 CAPI´TULO 5. CONCEITOS ELEMENTARES

28. Uma ageˆncia governamental deseja conhecer a distribuic¸a˜o da populac¸a˜o do pa´ıs
por faixa salarial. Para isto, coletou dados do u´ltimo censo realizado e criou um
arquivo contendo, em cada linha, a idade de um cidada˜o particular e seu sala´rio.
As idades variam de zero