ALGORITMOS E ESTRUTURAS DE DADOS I
259 pág.

ALGORITMOS E ESTRUTURAS DE DADOS I


DisciplinaAlgoritmos e Estrutura de Dados I708 materiais7.919 seguidores
Pré-visualização50 páginas
0.0
0.0). Apo´s a leitura de cada linha o programa deve tentar calcular as duas ra´\u131zes
da equac¸a\u2dco. A listagem de sa´\u131da, em cada linha, devera´ conter sempre os valores
de A, B e C lidos, seguidos dos valores das duas ra´\u131zes reais. Considere que o
usua´rio entrara´ somente com valores A, B e C tais que a equac¸a\u2dco garantidamente
tem duas ra´\u131zes reais.
12. Dados dois nu´meros inteiros positivos determinar quantas vezes o primeiro di-
vide exatamente o segundo. Se o primeiro na\u2dco divide o segundo o nu´mero de
vezes e´ zero.
13. Fac¸a um programa em Pascal que imprima exatamente a sa´\u131da especificada na
figura 1 (abaixo) de maneira que, em todo o programa, na\u2dco aparec¸am mais do
que tre\u2c6s comandos de impressa\u2dco.
14. Fac¸a um programa em Pascal que imprima exatamente a mesma sa´\u131da solicitada
no exerc´\u131cio anterior, mas que use exatamente dois comandos de repetic¸a\u2dco.
15. Fac¸a um programa em Pascal que receba dois nu´meros inteiros N e M como
entrada e retorne como sa´\u131da N MOD M usando para isto apenas operac¸o\u2dces de
subtrac¸a\u2dco. O seu programa deve considerar que o usua´rio entra com N sempre
maior do que N .
16. Adapte a soluc¸a\u2dco do exerc´\u131cio anterior para que a sa´\u131da 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\u2dco negativos.
O u´ltimo saldo, que na\u2dco corresponde a nenhum cliente (e portanto na\u2dco deve ser
impresso), conte´m o valor \u2013999.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\u2dces aritme´ticas abaixo, determine o tipo de dados
da varia´vel que esta´ no lado esquerdo do comando de atribuic¸a\u2dco bem como o
resultado da expressa\u2dco que esta´ no lado direito:
(a) A := 1 + 2 \u2217 3;
(b) B := 1 + 2 \u2217 3/7;
(c) C := 1 + 2 \u2217 3 DIV 7;
(d) D := 3 DIV 3 \u2217 4.0;
(e) E := A+B \u2217 C \u2212D
19. Indique qual o resultado das expresso\u2dces abaixo, sendo:
a=6; b=9.5; d=14; p=4; q=5; r=10; z=6.0 ; sim= TRUE
\u2022 ((z/a)+b*a)-d DIV 2
\u2022 p*(r MOD q)-q/2
\u2022 NOT sim AND (z DIV y + 1 = x)
\u2022 (x + y > z) AND sim OR (y >= x)
20. Indique qual o resultado das expresso\u2dces 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\u2c6ncia 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´\u131da os seguintes valores:
52 CAPI´TULO 5. CONCEITOS ELEMENTARES
\u2022 a quantidade de nu´meros lidos;
\u2022 a soma dos nu´meros lidos;
\u2022 os dois valores lidos que forc¸aram a parada do programa.
Exemplos:
Entrada
-549 -716 -603 -545 -424 -848
Sa\u131´da
6 -3685 -424 -848
Entrada
-549 -716 -603 -545 -424 646 438 892 964 384 192
Sa\u131´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\u2dces aritme´ticas usando o m\u131´nimo poss´\u131vel
de pare\u2c6nteses:
(a) W
2
Ax2+Bx+C
(b)
P1+P2
Y\u2212Z R
W
AB
+R
24. Tente compilar este programa. Procure descobrir qual(is) e´ (sa\u2dco) o(s) erro(s) e
corrigi-lo(s).
(\u2217 programa que le um numero e retorna o ultimo algarismo \u2217)
(\u2217 escrito por Marcos Castilho em 22/10/2002, com erros . \u2217)
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\u2dco, e quais sa\u2dco, os erros de compilac¸a\u2dco deste programa?
(b) Considerando que voce\u2c6 corrigiu os erros de compilac¸a\u2dco corretamente, o que
faz este programa?
(c) Considerando a estrutura do programa, os nomes das varia´veis e a en-
dentac¸a\u2dco usada, podemos afirmar que o programador cometeu alguns erros
de lo´gica. Quantos sa\u2dco e quais sa\u2dco estes erros?
(d) O que faz o programa faz apo´s estas correc¸o\u2dces?
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\u2212 1;
end;
i f (m := N1) then
writeln(\u2019O valor resultante eh: \u2019 m) ;
end.
27. Dado o programa abaixo, mostre o acompanhamento de sua execuc¸a\u2dco para tre\u2c6s
valores de entrada (valores pequenos). Em seguida, descreva o que o programa
faz, comprovando suas afirmac¸o\u2dces.
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) \u2217 m;
x := x div 2;
m := m \u2217 10;
end;
writeln(y)
end.
54 CAPI´TULO 5. CONCEITOS ELEMENTARES
28. Uma age\u2c6ncia governamental deseja conhecer a distribuic¸a\u2dco da populac¸a\u2dco do pa´\u131s
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\u2dco particular e seu sala´rio.
As idades variam de zero a 110 e os sala´rios variam de zero a 19.000,00 unidades
da moeda local (sala´rio do seu dirigente ma´ximo).
As faixas salariais de interesse sa\u2dco as seguintes:
\u2022 de 0 a 3 sala´rios m\u131´nimos
\u2022 de 4 a 9 sala´rios m\u131´nimos
\u2022 de 10 a 20 sala´rios m\u131´nimos
\u2022 acima de 20 sala´rios m\u131´nimos.
Sendo o sala´rio m\u131´nimo igual a 450,00 unidades da moeda local.
Fac¸a um programa em Pascal que leia o arquivo de entrada e produza como
sa´\u131da os percentuais da populac¸a\u2dco para cada faixa salarial de interesse.
29. Aqui temos uma forma peculiar de realizar uma multiplicac¸a\u2dco entre dois nu´meros:
multiplique o primeiro por 2 e divida o segundo por 2 ate´ que o primeiro seja
reduzido a 1. Toda vez que o primeiro for impar, lembre-se do segundo. Na\u2dco
considere qualquer frac¸a\u2dco durante o processo. O produto dos dois nu´meros e´
igual a soma dos nu´meros que foram lembrados. Exemplo: 53× 26 =
53 26 13 6 3 1
26 52 104 208 416 832
26 + 104 + 416 + 832 = 1378
Fac¸a uma func¸a\u2dco em Pascal que receba dois reais e retorne a multiplicac¸a\u2dco dos
dois, do modo como foi especificado acima. Na\u2dco e´ permitido uso de array.
30. Fac¸a um programa em Pascal que some duas horas. A entrada deve ser feita da
seguinte maneira:
12 52
7 13
A sa´\u131da deve ser assim:
12:52 + 7:13 = 20:05
Cap´\u131tulo 6
Te´cnicas elementares
O objetivo deste cap´\u131tulo e´ o dom\u131´nio por parte do estudante das principais estruturas
de controle de fluxo, em particular quando usadas de maneira combinada: atribuic¸a\u2dco;
entrada e sa´\u131da; desvio condicional e repetic¸a\u2dco, ale´m do uso de expresso\u2dces.
6.1 Atribuic¸o\u2dces dentro de repetic¸o\u2dces
Nesta sec¸a\u2dco veremos exemplos de problemas cujas soluc¸o\u2dces algor´\u131tmicas requerem o
uso de atribuic¸o\u2dces aninhadas em repetic¸o\u2dces.
6.1.1 Somando nu´meros
O problema abaixo servira´ para discutirmos va´rias maneiras de se resolver um mesmo
problema ate´ chegarmos na maneira mais elegante. Aproveitamos para discutir a
te´cnica dos acumuladores.
Problema: Ler 5 nu´meros positivos do teclado e imprimir a soma deles.
A primeira e mais simples soluc¸a\u2dco consiste em ler os 5 nu´meros do teclado e
em seguida imprimir a soma deles. O programa da figura 6.1 mostra o algoritmo
implementado para esta primeira proposta.
program soma valores ;
var
a1, a2, a3 , a4, a5: integer ;
begin
read (a1, a2, a3, a4, a5) ;
writeln (a1 + a2 + a3 + a4 + a5) ;
end.
Figura 6.1: Primeira soluc¸a\u2dco.
55
56 CAPI´TULO 6. TE´CNICAS ELEMENTARES
O programa funciona e atende ao requisitado no enunciado. Mas a soluc¸a\u2dco na\u2dco e´
boa. Imagine que fosse pedido a soma na\u2dco de 5 nu´meros, mas de 50. Para manter
a mesma ideia