Programando o Computador com PascaL: um
ambiente para Auto-Aprendizagem.
Resolução dos desafios propostos no Capítulo 6
Resolução do Desafio 6.1
Resolução do Desafio 6.2
a) Programa PascaL
program Desafio62;
var A, X : integer;
begin
A := 1;
X := 7;
while A < 10 do
begin
A := A + 1;
if A > 5
then begin
X := 1;
end
else begin
if A < X
then begin
X := 3;
end
else repeat
A := A + 1;
X := X - 1;
until A > X;
end;
end;
writeln( 'X = ' , X);
writeln( 'A = ' , A);
end.
b) Acompanhamento da execução
X=
7A=
1
(Entrou no bloco de controle de repetição, pois A <10)
X=
7A=
2 (acréscimo em A)
(Entrou no bloco de alternativa: A >5 é falso)
(Entrou no bloco de alternativa A<X é verdadeiro)
X=
3A=
2
(sai dos dois blocos de alternativa)
(termina um “loop” no bloco de repetição)
(continua no bloco de repetição, pois A <10)
X=
3A=
3 (acréscimo em A)
(Entra no bloco de alternativa: A>5 é falso)
(Entra no bloco de alternativa: A<X é falso)
(entra no bloco de repetição até que A >X)
(A cresce 1 e X decresce 1:
X=
3A=
2
X=
2A=
3
(A>X : verdadeiro)
(Sai do bloco de repetição)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
2A=
4 (acréscimo em A)
(entra no bloco de alternativa: A> 5: é falso)
(entra no bloco de alternativa( A<X : é flaso)
(entra no bloco de repetição até que A >X)
(A cresce 1 e X decresce 1:
X=
1A=
5
(A>X : verdadeiro)
(Sai do bloco de repetição)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
1A=
6 (acréscimo em A)
(entra no bloco de alternativa: A> 5: é verdadeiro)
X=
1A=
6 (acréscimo em A)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
1A=
7 (acréscimo em A)
(entra no bloco de alternativa: A> 5: é verdadeiro)
(atribui 1 a X)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
1A=
8 (acréscimo em A)
(entra no bloco de alternativa: A> 5: é verdadeiro)
(atribui 1 a X)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
1A=
9 (acréscimo em A)
(entra no bloco de alternativa: A> 5: é verdadeiro)
(atribui 1 a X)
(termina outro “loop” no bloco de repetição mais externo)
(Continua no bloco de repetição A< 10 : verdadeiro)
X=
1A=
10 (acréscimo a A)
(termina outro “loop” no bloco de repetição mais externo)
(Sai do bloco de repetição A< 10 : falso)
(Escreve os valores de X e A)
X=
1
A=
10
Resolução do desafio 6.3.
Resolução do Desafio 6.4
Supondo que exista pelo menos um valor no conjunto, podemos considerar que o
primeiro valor lido seja o maior e o menor ao mesmo tempo ( afinal, seria essa a
resposta se só houvesse um único valor no conjunto). Havendo mais valores, a
próxima leitura compararia o novo valor com o anterior trocando o maior ou menor
se for o caso. Assim, nossa estrutura de dados necessita de três variáveis: valor, maior
e menor. A interface recebe um valor de cada vez e, no final, escreve qual foi o
maior e o menor valor do conjunto. Podemos também escrever cada valor do
conjunto:
Exemplo de interface:
Forneça o primeiro valor. -1 para terminar.
2,
Forneça outro valor. -1 para terminar.
243,
Forneça outro valor. -1 para terminar.
12,
Forneça outro valor.-1 para terminar.
5,
Forneça outro valor. -1 para terminar.
6,
Forneça outro valor. -1 para terminar.
1,
Forneça outro valor. -1 para terminar.
34,
Forneça outro valor. -1 para terminar.
-1
a) Programa PascaL:
program Desafio64;
{Desafio 6.4}
var Valor,
Maior,
Menor : integer;
begin
{ leitura do primeiro valor}
write( ' Forneca o primeiro valor.');
writeln( ' -1 para terminar.');
readln(Valor);
Maior := Valor;
writeln( Valor );
Menor := Valor;
{ supor que é o maior }
{ supor que é o menor}
{ Lê e compara os próximos do conjunto - se houve) }
while Valor <> -1 do { -1 indica que não há mais
valores }
begin
if Valor > Maior { compara com maior}
then Maior := Valor
else if Valor < Menor
{ compara com menor
}
then Menor := valor;
write( 'Forneça outro valor.');
writeln( ' -1 para terminar.');
readln(Valor);
writeln( Valor);
end;
writeln;
writeln( 'Maior valor lido ', Maior);
writeln( 'Menor valor lido ', Menor);
end.
b) Execução do programa PascaL:
c) Fluxograma de Chapin equivalente:
d) Diagrama de atividades UML:
Resolução do Desafio 6.5
Estabelecimento do Problema:
Objetivos:
Descobrir qual foi:
a) O maior número de impulsos do mês.
b) quantos clientes atingiram o maior número de impulsos.
O que foi fornecido:
Quantidade de impulsos de cada cliente registrados no período de um
mês.
Visão da solução:
a) Maior numero de impulsos.
Tomar o número de impulsos do primeiro cliente como o maior de
todos.
b) Obter o número de impulsos do segundo cliente. Se este número de
impulsos for maior que o do primeiro cliente, considerar este novo valor como
o maior número de impulsos entre todos. Caso contrário, manter o anterior
como o maior. Proceder assim sucessivamente até avaliar todos os clientes (
Similar ao Desafio 6.4)
b) Contar quantos atingiram o maior valor.
Usar uma variável (digamos, Quantos) para contar quantos clientes atingiram o
maior número de impulsos.
Toda vez que o número de impulsos de um cliente for maior do que aquele
número, que, até então, tinha sido considerado como o maior número de
impulsos, começar a contar novamente, fazendo Quantos igual a 1.
O fluxograma a seguir mostra as linhas gerais da solução
O programa PascaL, a seguir, implementa o que está no fluxograma anterior.
program Desafio65;
{Desafio 6.5}
{ Descobre o maior número de impulsos por cliente
e indica quantos clientes atingiram esse
valor }
var Impulsos,
{ contém o número de
impulsos mensal
por cliente }
Quantos,
{ contém quantos
MaiorImpulsos: Integer;
assinantes
atingiram o maior
valor }
{ conterá o maior
número de impulsos
encontrado }
begin
Quantos := 0; { Nenhum cliente com maior
número de impulsos, por
enquanto }
{ Lê o primeiro valor}
write ( 'Forneça o número de impulsos do ',
'primeiro cliente ');
writeln( '-1 para indicar fim de clientes.');
readln( Impulsos);
writeln(Impulsos);
MaiorImpulsos := Impulsos;
{ Supõe que o
primeiro já é
o maior }
{lê e processa os próximos}
while Impulsos <> -1 do
begin
if Impulsos > MaiorImpulsos
then begin
MaiorImpulsos := Impulsos;
Quantos := 1; { É o primeiro
com este
valor }
end
else if Impulsos = MaiorImpulsos
then Quantos := Quantos + 1;
{ conta mais um
com maior
número de
impulsos }
write ('Forneça o número de impulsos ',
'do proximo cliente ');
writeln( '-1 para indicar fim de ',
' clientes. ');
readln( Impulsos);
writeln(Impulsos);
end;
{ Mostra resultados }
writeln;
writeln(' Maior número de impulsos no mês',
' : ', MaiorImpulsos);
writeln(' Número de clientes com ',
MaiorImpulsos,
' no mês: ', Quantos );
end.
Execução do programa com os seguintes valores para Impulsos:
12, 345, 45, 657, 43, 657, 32, -1
[Rodando... Desafio65]
Forneça o número de impulsos
clientes.
12
Forneça o número de impulsos
clientes.
345
Forneça o número de impulsos
clientes.
45
Forneça o número de impulsos
clientes.
657
Forneça o número de impulsos
clientes.
43
Forneça o número de impulsos
clientes.
657
Forneça o número de impulsos
clientes.
32
Forneça o número de impulsos
clientes.
-1
do primeiro cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
do proximo cliente -1 para indicar fim de
Maior número de impulsos no mês :
657
Número de clientes com
657 no mês:
Resolução do Desafio 6.6
program Desafio66;
{Desafio 6.6}
var Capital,
Juros,
Montante : real;
2
Periodo : integer;
begin
Readln(Capital);
Readln(Juros);
Periodo := 1;
while Periodo <= 10 do
begin
Montante := Capital * ( 1 - juros)*Periodo;
writeln(Montante);
Periodo := Periodo + 1;
end;
if Montante > 9000
then writeln(' Investir')
else writeln('Não investir');
end.
Execução para Capital = 1000 e juros = 0,12
880
1760
2640
3520
4400
5280
6160
7040
7920
8800
Não investir
Fim da resolução dos desafios do capítulo 6
Download

Programando o Computador com PascaL: um ambiente para Auto