Solução dos exercícios

Propaganda
Universidade Federal de Minas Gerais - UFMG
Instituto de Ciências Exatas - ICEx
Disciplina: Programação de Computadores
Professor: David Menoti ([email protected])
Monitor: João Felipe Kudo ([email protected])
Lista de Exercícios 03 – Algoritmos – Repetição
Estrutura de Repetição
(para ... de ... até ... passo ... faça: ... fim-para)
5) Escreva um algoritmo em PORTUGOL que imprima todos os números inteiros de 200
a 100 (em ordem decrescente).
início
inteiro: C;
para C de 200 até 100 passo -1 faça:
imprima(C);
fim-para
fim
program l3p005;
var
C: integer;
begin
for C := 200 downto 100 do
writeLn(C);
end.
for C = 200 : -1 : 100
disp(C);
end
10) Escreva um algoritmo em PORTUGOL que imprima todos os números ímpares do
intervalo fechado de 1 a 100.
início
inteiro: C;
para C de 1 até 100 faça:
imprima(C);
fim-para
fim
program l3p010;
var
C: integer;
begin
for C := 1 to 100 do
if ( C mod 2 = 1) then
writeLn(C);
end.
for C = 1 : 100
if ( mod( C , 2 ) == 1 )
disp(C);
end
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 1
15) Escreva um algoritmo em PORTUGOL que receba oito números do usuário e imprima
o logaritmo de cada um deles na base 10.
início
inteiro: C;
real: VALOR, LOG;
para C de 1 até 8 faça:
leia(VALOR);
se ( VALOR > 0 ) então
LOG <- log(VALOR) / log(10);
imprima(LOG);
senão
imprima("Não é possível calcular o log na base dez! Número negativo!");
fim-se
fim-para
fim
program l3p015;
var
C: integer;
VALOR, LOG: real;
begin
for C := 1 to 8 do
begin
write('Digite um valor: ');
readLn(VALOR);
if ( VALOR > 0 ) then begin
LOG := Ln(VALOR) / Ln(10);
writeLn(LOG:3:2); end
else
writeLn('Nao eh possivel calcular o log na base dez! Numero negativo!');
end;
end.
for C = 1 : 8
VALOR = input('Digite um valor: ');
if ( VALOR > 0 )
LOG = log(VALOR) / log(10);
disp(LOG);
else
disp('Nao eh possivel calcular o log na base dez! Numero negativo!');
end
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 2
20) Criar um algoritmo em PORTUGOL que imprima todos os números de 1 até 100,
inclusive, e a média de todos eles.
início
inteiro: C;
real: VALOR, LG;
para C de 1 até 8 faça:
leia(VALOR);
se ( VALOR > 0 ) então
LG <- log(VALOR) / log(10);
imprima(LG);
senão
imprima("Não é possível calcular o log na base dez! Número negativo!");
fim-se
fim-para
fim
program l3p020;
var
C : integer;
SOMA,MEDIA: real;
begin
SOMA := 0;
for C := 1 to 100 do
begin
writeLn(C);
SOMA := SOMA + C;
end;
MEDIA := SOMA / 100;
writeLn('O valor da media da soma dos cubos eh: ',MEDIA:3:2);
end.
SOMA = 0;
for C=1:100
disp(C);
SOMA = SOMA + C;
end
MEDIA = SOMA / 100;
fprintf(1,'O valor da media da soma dos cubos eh: %f\n',MEDIA);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 3
25) Criar um algoritmo em PORTUGOL que leia dez números inteiros e imprima o maior
e o segundo maior número da lista.
início
inteiro: C,VALOR,M1,M2;
{ M1 é o primeiro maior, e M2 é o segundo maior }
leia(VALOR);
M1 <- VALOR;
para C de 2 até 10 faça:
leia(VALOR);
se ( VALOR > M1 ) então
M2 <- M1;
M1 <- VALOR;
senão
se ( VALOR > M2 ) ou ( C = 2 ) então
M2 <- VALOR;
fim-se
fim-se
fim-para
imprima("O primeiro maior é: ",M1);
imprima("O segundo maior é: ",M2);
fim
program l3p025;
var
C,VALOR,M1,M2: integer;
begin
{ M1 eh o primeiro maior, e M2 eh o segundo maior }
write('Digite um valor: ');
readLn(VALOR);
M1 := VALOR;
for C := 2 to 10 do
begin
write('Digite um valor: ');
readLn(VALOR);
if ( VALOR > M1 ) then begin
M2 := M1;
M1 := VALOR; end
else
if ( VALOR > M2 ) or ( C = 2 ) then
M2 := VALOR;
end;
writeLn('O primeiro maior eh: ',M1);
writeLn('O segundo maior eh: ',M2);
end.
% M1 eh o primeiro maior, e M2 eh o segundo maior }
VALOR = input('Digite um valor: ');
M1 = VALOR;
for C = 2 : 10
VALOR = input('Digite um valor: ');
if ( VALOR > M1 )
M2 = M1;
M1 = VALOR;
else
if ( VALOR > M2 ) | ( C == 2 )
M2 = VALOR;
end
end
end
fprintf(1,'O primeiro maior eh: %d\n',M1);
fprintf(1,'O segundo maior eh: %d\n',M2);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 4
30) Escreva um algoritmo em PORTUGOL que leia 20 números e imprima a soma dos
positivos e o total de números negativos.
início
inteiro: C, NNEG;
real: VALOR, SOMAP;
SOMAP <- 0;
NNEG <- 0;
para C de 1 até 20 faça:
leia(VALOR);
se ( VALOR > 0 )
então SOMAP <- SOMAP + VALOR; { número positivo }
senão NNEG <- NNEG + 1; { número negativo }
fim-se
fim-para
imprima("A soma dos número positivos digitados é: ",SOMAP);
imprima("A quantidade de números negativos digitados é: ",NNEG);
fim
program l3p030;
var
C, NNEG: integer;
VALOR, SOMAP: real;
begin
SOMAP := 0;
NNEG := 0;
for C := 1 to 20 do
begin
write('Digite um numero: ');
readLn(VALOR);
if ( VALOR > 0 ) then
SOMAP := SOMAP + VALOR { numero positivo }
else
NNEG := NNEG + 1;
{ numero negativo }
end;
writeLn('A soma dos numero positivos digitados eh: ',SOMAP:3:2);
writeLn('A quantidade de numeros negativos digitados eh: ',NNEG);
end.
SOMAP = 0;
NNEG = 0;
for C = 1 : 20
VALOR = input('Digite um numero: ');
if ( VALOR > 0 )
SOMAP = SOMAP + VALOR; % numero positivo
else
NNEG = NNEG + 1;
% numero negativo
end
end
fprintf(1,'A soma dos numero positivos digitados eh: %f\n',SOMAP);
fprintf(1,'A quantidade de numeros negativos digitados eh: %d\n',NNEG);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 5
35) Escreva um algoritmo em PORTUGOL que determine se dois valores inteiros e
positivos A e B são primos entre si. (dois números inteiros são ditos primos entre si,
caso não exista divisor comum aos dois números).
início
inteiro: A, B, C;
lógico: SIT;
SIT <- verdadeiro;
leia(A,B);
C <- 2;
enquanto ( SIT ) e (
se (A mod C = 0) e
SIT <- falso;
fim-se
C <- C + 1;
fim-enquanto
se ( SIT ) então
imprima("A e B são
senão
imprima("A e B não
fim-se
fim
C <= A ) e ( C <= B ) faça:
(B mod C = 0) então
primos entre si ");
são primos entre si");
program l3p035;
var
A, B, C: integer;
SIT: boolean;
begin
SIT := true;
write('Entre com valor de A: ');
readLn(A);
write('Entre com valor de B: ');
readLn(B);
C := 2;
while ( SIT ) and ( C <= A ) and ( C <= B ) do
begin
if (A mod C = 0) and (B mod C = 0) then
SIT := false;
C := C + 1;
end;
if ( SIT ) then
writeLn('A e B sao primos entre si ')
else
writeLn('A e B nao sao primos entre si');
end.
SIT = 1; % true
A = input('Entre com valor de A: ');
B = input('Entre com valor de B: ');
C = 2;
while ( SIT ) & ( C <= A ) & ( C <= B )
if ( mod(A,C) == 0 ) & (mod(B,C) == 0)
SIT = 0; % false
end
C = C + 1;
end
if ( SIT )
disp('A e B sao primos entre si ');
else
disp('A e B nao sao primos entre si');
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 6
40) Escreva um algoritmo em PORTUGOL que calcule o m.d.c. (máximo divisor comum)
entre A e B (número inteiros e positivos). Esses dois valores são passados pelo usuário
através do teclado.
início
inteiro: A, B, C, MDC;
leia(A,B);
C <- 1;
enquanto ( C <= A ) e ( C <= B ) faça:
se (A mod C = 0) e (B mod C = 0) então
MDC <- C;
fim-para
C <- C + 1;
fim-para
imprima("O m.d.c. de A e B (m.d.c.(A,B)) é: ",MDC);
fim
program l3p040;
var
A, B, C, MDC: integer;
begin
write('Digite um numero: ');
readLn(A);
write('Digite outro numero: ');
readLn(B);
C := 1;
while ( C <= A ) and ( C <= B ) do
begin
if (A mod C = 0) and (B mod C = 0) then
MDC := C;
C := C + 1;
end;
writeLn('O m.d.c. de A e B (m.d.c.(A,B)) eh: ',MDC);
end.
A = input('Digite um numero: ');
B = input('Digite outro numero: ');
C = 1;
while ( C <= A ) & ( C <= B )
if ( mod(A,C) == 0 ) & ( mod(B,C) == 0 )
MDC = C;
end
C = C + 1;
end
fprintf(1,'O m.d.c. de A e B (m.d.c.(A,B)) eh: %d\n',MDC);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 7
45) Seja a seguinte série:
1, 4, 4, 2, 5, 5, 3, 6, 6, 4, 7, 7, ...
Escreva um algoritmo em PORTUGOL que seja capaz de gerar os N termos dessa
série. Esse número N deve ser lido do teclado.
início
inteiro: N, C;
leia(N);
para C de 1 até N faça:
se ( C mod 3 = 1 ) então
imprima( ( C div 3 ) + 1 ); { 1º, 4º, 7º , ... }
senão
se ( C mod 3 = 2 ) então
imprima( ( C div 3 ) + 4 ); { 2º, 5º, 8º , ... }
senão
imprima( ( C div 3 ) + 3 ); { 3º, 6º, 9º , ... }
fim-se
fim-se
fim-para
fim
program l3p045;
var
N, C: integer;
begin
write('Digite o numero de termos:
read(N);
for C := 1 to N do
begin
if ( C mod 3 = 1 ) then
writeLn( ( C div 3 ) + 1 )
else
if ( C mod 3 = 2 ) then
writeLn( ( C div 3 ) + 4 )
else
writeLn( ( C div 3 ) + 3 );
end;
end.
');
{ 1o, 4o, 7o , ... }
{ 2o, 5o, 8o , ... }
{ 3o, 6o, 9o , ... }
N = input('Digite o numero de termos: ');
for C = 1 : N
if ( mod(C,3) == 1 )
fprintf(1,'%d\n', floor( C / 3 ) + 1 ) % 1o, 4o, 7o , ...
else
if ( mod(C,3) == 2 )
fprintf(1,'%d\n', floor( C / 3 ) + 4 ); % 2o, 5o, 8o , ...
else
fprintf(1,'%d\n', floor( C / 3 ) + 3 ); % 3o, 6o, 9o , ...
end
end
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 8
50) Faça um algoritmo que:
- leia um número real X do teclado;
- determine e imprima o seguinte somatório:
S=X−
X X X X
+ − + +L
1! 2! 3! 4!
usando os 20 primeiros termos da série.
início
inteiro: I, J, FAT;
real: X, S;
leia(X);
S <- 0;
para I de 1 até 20 faça:
FAT <- 1;
para J de 2 até I-1 faça:
FAT <- FAT * J;
fim-para
se ( I mod 2 = 0 ) senão
S <- S - X / FAT; { termo par }
senão
S <- S + X / FAT; { termo ímpar }
fim-se
fim-para
imprima("S = ",S);
fim
program l3p050;
var
I, J: integer;
X, FAT, S: real;
begin
write('Digite X: ');
readLn(X);
S := 0;
for I := 1 to 20 do
begin
FAT := 1;
for J := 2 to I-1 do
FAT := FAT * J;
if ( I mod 2 = 0 ) then
S := S - X / FAT { termo par }
else
S := S + X / FAT; { termo impar }
end;
writeLn('S = ',S:5:4);
end.
X = input('Digite X: ');
S = 0;
for I = 1 : 20
FAT = 1;
for J = 2 : I - 1
FAT = FAT * J;
end
if ( mod(I,2) == 0 )
S = S - X / FAT; % termo par
else
S = S + X / FAT; % termo impar
end
end
fprintf(1,'S = %f\n',S);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 9
55) Criar um algoritmo que leia o valor de N, imprima a seqüência a seguir e o resultado.
N! / 0! – (N-1)! / 2! + (N-2)! / 4! – (N-3)! / 6! + ... 0! / (2N)!
início
inteiro: I, J, N, FATN, FATD;
real: SOMA, R;
leia(N);
SOMA <- 0;
para I de 0 até N faça:
FATN <- 1;
para J de 2 até N – I faça:
FATN <- FATN * J;
fim-para
FATD <- 1;
para J de 2 até 2*I * 2*I faça:
FATD <- FATD * J;
fim-para
R <- FATN / (FATD ** 2);
imprima(R);
SOMA <- SOMA + R;
fim-para
imprima("Soma = ",SOMA);
fim
program l3p055;
var
I, J, N: integer;
SOMA, R, FATN, FATD: real;
begin
write('Entre com o valor de N: ');
read(N);
SOMA := 0;
for I := 0 to N do
begin
FATN := 1;
for J := 2 to N - I do
FATN := FATN * J;
FATD := 1;
for J := 2 to (2 * I) do
FATD := FATD * J;
R := FATN / (FATD * FATD);
writeLn(I+1,'o. Termo = ',R:17:16);
SOMA := SOMA + R;
end;
writeLn('Soma = ',SOMA:17:16);
end.
N = input('Entre com o valor de N: ');
SOMA = 0;
for I = 0 : N
FATN = 1;
for J = 2 : N - I
FATN = FATN * J;
end
FATD = 1;
for J = 2 : (2 * I)
FATD = FATD * J;
end
R = FATN / (FATD * FATD);
fprintf(1,'%do. Termo = %f\n',I+1,R);
SOMA = SOMA + R;
end
fprintf(1,'Soma = %f\n',SOMA);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 10
60) Calcule o imposto de renda de um grupo de 10 contribuintes, considerando que os
dados de cada contribuinte, número do CPF, número de dependentes e renda mensal
são valores fornecidos pelo usuário. Para cada contribuinte será feito um desconto de
5% do salário mínimo por dependente.
Os valores da alíquota para cálculo do imposto são:
Renda Líquida
Alíquota
Até 2 salários mínimos
Isento
2 a 3 salários mínimos
5%
3 a 5 salários mínimos
10%
5 a 7 salários mínimos
15%
Acima de 7 salários mínimos
20%
Observe que deve ser fornecido o valor atual do salário mínimo para que o algoritmo
calcule os valores corretamente.
início
inteiro: C,CPF,NDEP;
real:
RENDA,SALMIN,IMP,NSALMIN;
leia(SALMIN);
para C de 1 até 10 faça:
leia(CPF);
leia(NDEP);
leia(RENDA);
NSALMIN <- RENDA / SALMIN;
se ( NSALMIN < 2 ) então
IMP <- 0;
senão
se ( NSALMIN < 3 ) então
IMP <- RENDA*5/100;
senão
se ( NSALMIN < 5 ) então
IMP <- RENDA*10/100;
senão
se ( NSALMIN < 7 ) então
IMP <- RENDA*15/100;
senão
IMP <- RENDA*20/100;
fim-se
fim-se
fim-se
fim-se
IMP <- IMP + NDEP * (SALMIN*5/100);
se ( IMP > 0 ) então
imprima("Imposto a ser pago: ",IMP);
senão
imprima("Imposto a ser restituído: ",-IMP);
fim-se
fim-para
fim
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 11
program l3p060;
var
C,CPF,NDEP: integer;
RENDA,SALMIN,IMP,NSALMIN: real;
begin
write('Informe o salario minimo: ');
readLn(SALMIN);
for C := 1 to 10 do
begin
write('CPF: ');
readLn(CPF);
write('N Dep: ');
readLn(NDEP);
write('Renda: ');
readLn(RENDA);
NSALMIN := RENDA / SALMIN;
if ( NSALMIN < 2 ) then
IMP := 0
else
if ( NSALMIN < 3 ) then
IMP := RENDA*5/100
else
if ( NSALMIN < 5 ) then
IMP := RENDA*10/100
else
if ( NSALMIN < 7 ) then
IMP := RENDA*15/100
else
IMP := RENDA*20/100;
IMP := IMP - NDEP * (SALMIN*5/100);
if ( IMP > 0 ) then
writeLn('Imposto a ser pago: ',IMP:3:2)
else
writeLn('Imposto a ser restituído: ',-IMP:3:2);
end;
end.
SALMIN = input('Informe o salario minimo: ');
for C = 1 : 10
CPF = input('CPF: ');
NDEP = input('N Dep: ');
RENDA = input('Renda: ');
NSALMIN = RENDA / SALMIN;
if ( NSALMIN < 2 )
IMP = 0;
elseif ( NSALMIN < 3 )
IMP = RENDA*5/100;
elseif ( NSALMIN < 5 )
IMP = RENDA*10/100;
elseif ( NSALMIN < 7 )
IMP = RENDA*15/100;
else
IMP = RENDA*20/100;
end
IMP = IMP - NDEP * (SALMIN*5/100);
if ( IMP > 0 )
fprintf(1,'Imposto a ser pago: %.2f\n',IMP);
else
fprintf(1,'Imposto a ser restituído: %.2f\n',-IMP);
end
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 12
65) Escreva um algoritmo em PORTUGOL que receba números e imprima o quadrado de
cada número até entrar um número múltiplo de 6 que deverá ter seu quadrado também
impresso.
início
inteiro: N;
N <- 1; { N deve ser inicializado com qualquer valor que não seja multiplo de 6 }
enquanto ( N mod 6 <> 0 ) faça:
leia(N);
imprima(N**2);
fim-enquanto
fim
program l3p065;
var
N: integer;
begin
N := 1; { N deve ser inicializado com qualquer valor que não seja multiplo de 6 }
while ( N mod 6 <> 0 ) do
begin
write('Digite um numero: ');
readLn(N);
writeLn(N*N);
end;
end.
N = 1; % N deve ser inicializado com qualquer valor que não seja multiplo de 6
while ( mod(N,6) ~= 0 )
N = input('Digite um numero: ');
disp(N*N);
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 13
70) Construa um algoritmo em PORTUGOL para encontrar o maior e o menor número de
uma série de números positivos fornecidos pelo usuário através do teclado.
Novamente, o dado finalizador é o número –1, e este não deve ser considerado.
início
inteiro: VALOR, MENOR, MAIOR;
leia(VALOR);
MENOR <- VALOR;
MAIOR <- VALOR
enquanto ( VALOR <> -1 ) faça:
leia(VALOR);
se ( VALOR > 0 ) então
se ( VALOR < MENOR ) então
MENOR <- VALOR;
senão
se ( VALOR > MAIOR ) então
MAIOR <- VALOR;
fim-se
fim-se
fim-se
fim-enquanto
imprima("O menor valor digitado é: ",MENOR);
imprima("O maior valor digitado é: ",MAIOR);
fim
program l3p070;
var
VALOR, MENOR, MAIOR: integer;
begin
write('Digite um valor: ');
readLn(VALOR);
MENOR := VALOR;
MAIOR := VALOR;
while ( VALOR <> -1 ) do
begin
write('Digite um valor: ');
readLn(VALOR);
if ( VALOR > 0 ) then
if ( VALOR < MENOR ) then
MENOR := VALOR
else
if ( VALOR > MAIOR ) then
MAIOR := VALOR;
end;
writeLn('O menor valor digitado eh: ',MENOR);
writeLn('O maior valor digitado eh: ',MAIOR);
end.
VALOR = input('Digite um valor: ');
MENOR = VALOR;
MAIOR = VALOR;
while ( VALOR ~= -1 )
VALOR = input('Digite um valor: ');
if ( VALOR > 0 )
if ( VALOR < MENOR )
MENOR = VALOR
else
if ( VALOR > MAIOR )
MAIOR = VALOR;
end
end
end
end
fprintf(1,'O menor valor digitado eh: %d\n',MENOR);
fprintf(1,'O maior valor digitado eh: %d\n',MAIOR);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 14
75) Considere uma linha ferroviária entre São Paulo e Curitiba. Suponha que uma
locomotiva (trem) A parte de São Paulo para Curitiba com velocidade de 30 m/s
enquanto que uma outra locomotiva B parte de Curitiba para São Paulo no mesmo
instante com velocidade de 40 m/s. Considere a distância entre São Paulo e Curitiba
de 400 Km. Escreva um algoritmo em PORTUGOL que calcule iterativamente o
tempo necessário para os maquinistas pararem as locomotivas antes que uma colisão
aconteça. O algoritmo deve calcular também a distância que as locomotivas devem
percorrer para que a colisão aconteça.
início
inteiro: T;
real:
A, B;
A <- 0;
B <- 400000;
T <- 0;
enquanto ( A < B ) faça:
A <- A + 30;
B <- B - 40;
T <- T + 1; { passaram-se um segundo }
fim-enquanto
imprima("São necessários ",T," segundos para a colisão");
imprima("A locomotiva A deve percorrer: ",A," metros");
imprima("Enquanto que a locomotiva B deve percorrer: ",400000-B," metros");
fim
program l3p075;
var
T: integer;
A, B: real;
begin
A := 0;
B := 400000;
T := 0;
while ( A < B ) do
begin
A := A + 30;
B := B - 40;
T := T + 1; { passaram-if um segundo }
end;
writeLn('Sao necessarios ',T,' segundos para a colisao');
writeLn('A locomotiva A deve percorrer: ',A:1:0,' metros');
writeLn('Enquanto que a locomotiva B deve percorrer: ',400000-B:1:0,' metros');
end.
A = 0;
B = 400000;
T = 0;
while ( A < B )
A = A + 30;
B = B - 40;
T = T + 1; % passaram-se um segundo
end
fprintf(1,'Sao necessarios %d segundos para a colisao\n',T);
fprintf(1,'A locomotiva A deve percorrer: %f metros\n',A);
fprintf(1,'Enquanto que a locomotiva B deve percorrer: %f metros\n',400000-B);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 15
80) Criar um algoritmo em PORTUGOL que leia um conjunto de informações (nome,
sexo, idade, peso e altura) dos atletas que participaram de uma olimpíada, e informar:
-
O atleta do sexo masculino mais alto;
A atleta do sexo feminino mais pesada;
A média de idade dos atletas.
Deverão ser lidos dados dos atletas até que seja digitado o nome @ para um atleta.
início
real:
PESO, ALTURA, ALTUMAS, PESOFEM, MEDIA;
inteiro: IDADE, SOMA,CTMAS, CTFEM;
caractere: NOME, SEXO;
CTMAS <- 0;
CTFEM <- 0;
SOMA <- 0;
leia(NOME);
enquanto ( NOME <- "@" ) faça:
leia(SEXO,PESO,ALTURA,IDADE)
se ( SEXO = "M" ) então
CTMAS <- CTMAS + 1;
se ( ALTURA > ALTUMAS ) ou ( CTMAS = 1 ) então
ALTUMAS <- ALTURA;
fim-se
fim-se
se ( SEXO = "F" ) então
CTFEM <- CTFEM + 1;
se ( PESO > PESOFEM ) ou ( CTFEM = 1 ) então
PESOFEM <- PESO;
fim-se
fim-se
SOMA <- SOMA + IDADE;
leia(NOME);
fim-enquanto
MEDIA <- SOMA / (CTMAS + CTFEM);
imprima("A altura do mais alto atleta do sexo masculino é: ",ALTUMAS);
imprima("O peso da atleta feminina mais pesada é: ",PESOFEM);
imprima("A média de idade dos atletas é: ",MEDIA);
fim
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 16
program l3p080;
var
PESO,ALTURA,ALTUMAS,PESOFEM, MEDIA: real;
IDADE,SOMA,CTMAS,CTFEM: integer;
SEXO, NOME: string;
begin
CTMAS := 0;
CTFEM := 0;
SOMA := 0;
write('Digite o nome: ');
readLn(NOME);
while ( NOME <> '@' ) do
begin
write('Sexo (M/F): ');
readLn(SEXO);
write('Peso: ');
readLn(PESO);
write('Altura: ');
readLn(ALTURA);
write('Idade: ');
readLn(IDADE);
if ( SEXO = 'M' ) or ( SEXO = 'm' ) then
begin
CTMAS := CTMAS + 1;
if ( ALTURA > ALTUMAS ) or ( CTMAS = 1 ) then
ALTUMAS := ALTURA;
end;
if ( SEXO = 'F' ) or ( SEXO = 'f' ) then
begin
CTFEM := CTFEM + 1;
if ( PESO > PESOFEM ) or ( CTFEM = 1 ) then
PESOFEM := PESO;
end;
SOMA := SOMA + IDADE;
write('Digite o nome: ');
readLn(NOME);
end;
writeLn('A altura do mais alto atleta do sexo masculino eh: ',ALTUMAS:4:2);
writeLn('O peso da atleta feminina mais pesada eh: ',PESOFEM:5:2);
if ( CTMAS + CTFEM <> 0 ) then begin
MEDIA := SOMA / (CTMAS + CTFEM);
writeLn('A media de idade dos atletas eh: ',MEDIA:3:2); end
else
writeLn('Nenhum atleta foi detectado!');
end.
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 17
CTMAS = 0;
CTFEM = 0;
SOMA = 0;
ALTUMAS = 0;
PESOFEM = 0;
NOME = input('Digite o nome: ','s');
while ( NOME ~= '@' )
SEXO = input('Sexo (M/F): ','s');
PESO = input('Peso: ');
ALTURA = input('Altura: ');
IDADE = input('Idade: ');
if ( SEXO == 'M' ) | ( SEXO == 'm' )
CTMAS = CTMAS + 1;
if ( ALTURA > ALTUMAS ) | ( CTMAS == 1 )
ALTUMAS = ALTURA;
end
end
if ( SEXO == 'F' ) | ( SEXO == 'f' )
CTFEM = CTFEM + 1;
if ( PESO > PESOFEM ) | ( CTFEM == 1 )
PESOFEM = PESO;
end
end
SOMA = SOMA + IDADE;
NOME = input('Digite o nome: ','s');
end
fprintf(1,'A altura do mais alto atleta do sexo masculino eh: %.2f\n',ALTUMAS);
fprintf(1,'O peso da atleta feminina mais pesada eh: %.2f\n',PESOFEM);
if ( CTMAS + CTFEM ~= 0 )
MEDIA = SOMA / (CTMAS + CTFEM);
fprintf(1,'A media de idade dos atletas eh: %.2f\n',MEDIA);
else
disp('Nenhum atleta foi detectado!');
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 18
85) Criar um algoritmo em PORTUGOL que receba vários números inteiros e positivos e
imprima a média dos números múltiplos de 3. A execução deve encerrar quando um
número não positivo for lido.
início
inteiro: NUM, SOMA, C;
real: MEDIA;
C <- 0;
leia(NUM);
enquanto ( NUM > 0 ) faça:
se ( NUM mod 3 = 0) então
C <- C + 1;
SOMA <- SOMA + NUM;
fim-se
leia(NUM);
fim-enquanto
MEDIA <- SOMA / C;
imprima("A média dos múltiplos de 3 digitados é: ",MEDIA);
fim
program l3p085;
var
MEDIA: real;
NUM, SOMA, C: integer;
begin
C := 0;
write('Digite um numero: ');
readLn(NUM);
while ( NUM > 0 ) do
begin
if ( NUM mod 3 = 0) then begin
C := C + 1;
SOMA := SOMA + NUM; end;
write('Digite um numero: ');
readLn(NUM);
end;
MEDIA := SOMA / C;
writeLn('A media dos multiplos de 3 digitados eh: ',MEDIA:5:4);
end.
C = 0;
NUM = input('Digite um numero: ');
while ( NUM > 0 )
if ( mod(NUM,3) == 0 )
C = C + 1;
SOMA = SOMA + NUM;
end
NUM = input('Digite um numero: ');
end
MEDIA = SOMA / C;
fprintf(1,'A media dos multiplos de 3 digitados eh: %.4f\n',MEDIA);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 19
90) Escreva um algoritmo em PORTUGOL que receba vários números e verifique se eles
são ou não quadrados perfeitos. O algoritmo termina a execução quando for digitado
um número menor ou igual a 0. (Um número é quadrado perfeito quando tem um
número inteiro como raiz quadrada.)
início
inteiro: NUM, C;
leia(NUM);
enquanto ( NUM >
C <- 1;
enquanto ( C *
se ( C * C =
imprima("O
fim-se
C <- C + 1;
fim-para
leia(NUM);
fim-enquanto
fim
0 ) faça:
C <= NUM ) faça:
NUM ) então
número digitado é quadrado perfeito!");
program l3p090;
var
NUM, C: integer;
begin
write('Digite um numero: ');
readLn(NUM);
while ( NUM > 0 ) do
begin
C := 1;
while ( C * C <= NUM ) do
begin
if ( C * C = NUM ) then
writeLn('O numero digitado eh quadrado perfeito!');
C := C + 1;
end;
write('Digite um numero: ');
readLn(NUM);
end;
end.
NUM = input('Digite um numero: ');
while ( NUM > 0 )
C = 1 ;
while ( C * C <= NUM )
if ( C * C == NUM )
disp('O numero digitado eh quadrado perfeito!');
end
C = C + 1;
end
NUM = input('Digite um numero: ');
end
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 20
95) Em uma eleição presidencial, existem quatro candidatos. Os votos são informados
através de código. Os dados utilizados para a escrutinagem obedecem à seguinte
codificação:
-
1, 2, 3 e 4 = voto para os respectivos candidatos;
5 voto nulo;
6 voto em branco;
início
inteiro: VOTO,NTOT,NCAND1,NCAND2,NCAND3,NCAND4,NBRANCO,NNULO;
real:
PERC;
NTOT <- 0;
NCAND1 <- 0;
NCAND2 <- 0;
NCAND3 <- 0;
NCAND4 <- 0;
NBRANCO <- 0;
NNULO <- 0;
leia(VOTO);
enquanto ( VOTO >= 1 ) faça:
NTOT <- NTOT + 1;
se (VOTO = 1) então
NCAND1 <- NCAND1 + 1;
senão
se (VOTO = 2) então
NCAND2 <- NCAND2 + 1;
senão
se (VOTO = 3) então
NCAND3 <- NCAND3 + 1;
senão
se (VOTO = 4) então
NCAND4 <- NCAND4 + 1;
senão
se (VOTO = 5) então
NNULO <- NNULO + 1;
senão
se (VOTO = 6) então
NBRANCO <- NBRANCO + 1;
senão
NNULO <- NNULO + 1; {voto inválido}
fim-se
fim-se
fim-se
fim-se
fim-se
fim-se
leia(VOTO);
fim-para
imprima("O total de votos para o candidato 1 é: ",NCAND1);
imprima("O total de votos para o candidato 2 é: ",NCAND2);
imprima("O total de votos para o candidato 3 é: ",NCAND3);
imprima("O total de votos para o candidato 4 é: ",NCAND4);
imprima("Número de votos em branco: ",NBRANCO);
imprima("Número de votos nulos: ",NNULO);
PERC <- (NBRANCO + NNULO) / NTOT;
imprima("Percentual de votos branco e nulos sobre o total é: ",PERC);
fim
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 21
program l3p095;
var
VOTO,NTOT,NCAND1,NCAND2,NCAND3,NCAND4,NBRANCO,NNULO: integer;
PERC: real;
begin
NTOT := 0;
NCAND1 := 0;
NCAND2 := 0;
NCAND3 := 0;
NCAND4 := 0;
NBRANCO := 0;
NNULO := 0;
write('Voto: ');
readLn(VOTO);
while ( VOTO >= 1 ) do
begin
NTOT := NTOT + 1;
if (VOTO = 1) then
NCAND1 := NCAND1 + 1
else if (VOTO = 2) then
NCAND2 := NCAND2 + 1
else if (VOTO = 3) then
NCAND3 := NCAND3 + 1
else if (VOTO = 4) then
NCAND4 := NCAND4 + 1
else if (VOTO = 5) then
NNULO
:= NNULO + 1
else if (VOTO = 6) then
NBRANCO := NBRANCO + 1
else
NNULO
:= NNULO + 1; {voto inválido}
write('Voto: ');
readLn(VOTO);
end;
writeLn('O total de votos para o candidato 1 eh: ',NCAND1);
writeLn('O total de votos para o candidato 2 eh: ',NCAND2);
writeLn('O total de votos para o candidato 3 eh: ',NCAND3);
writeLn('O total de votos para o candidato 4 eh: ',NCAND4);
writeLn('Numero de votos em branco: ',NBRANCO);
writeLn('Numero de votos nulos: ',NNULO);
PERC := 100 * (NBRANCO + NNULO) / NTOT;
writeLn('Percentual de votos branco e nulos sobre o total eh: ',PERC:6:2);
end.
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 22
NTOT = 0;
NCAND1 = 0;
NCAND2 = 0;
NCAND3 = 0;
NCAND4 = 0;
NBRANCO = 0;
NNULO = 0;
VOTO = input('Voto: ');
while ( VOTO >= 1 )
NTOT = NTOT + 1;
if (VOTO == 1)
NCAND1 = NCAND1 + 1;
elseif (VOTO == 2)
NCAND2 = NCAND2 + 1;
elseif (VOTO == 3)
NCAND3 = NCAND3 + 1;
elseif (VOTO == 4)
NCAND4 = NCAND4 + 1;
elseif (VOTO == 5)
NNULO
= NNULO
+ 1;
elseif (VOTO == 6)
NBRANCO = NBRANCO + 1;
else
NNULO
= NNULO
+ 1; % voto inválido
end
VOTO = input('Voto: ');
end
fprintf(1,'O total de votos para o candidato 1 é: %d\n',NCAND1);
fprintf(1,'O total de votos para o candidato 2 é: %d\n',NCAND2);
fprintf(1,'O total de votos para o candidato 3 é: %d\n',NCAND3);
fprintf(1,'O total de votos para o candidato 4 é: %d\n',NCAND4);
fprintf(1,'Número de votos em branco: %d\n',NBRANCO);
fprintf(1,'Número de votos nulos: %d\n',NNULO);
PERC = 100 * (NBRANCO + NNULO) / NTOT;
fprintf(1,'Percentual de votos branco e nulos sobre o total é: %.2f\n',PERC);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 23
100) Uma fábrica produz e vende vários produtos e para cada um deles tem-se o nome,
quantidade produzida e quantidade vendida. Criar um algoritmo em PORTUGOL que
imprima:
-
Para cada produto, nome, quantidade no estoque e uma mensagem se o produto
tiver menos de 50 itens no estoque;
Nome e quantidade do produto com maior estoque;
início
inteiro:
QTDPROD,QTDVEND,ESTOQUE,ESTOQUEMAIOR;
caractere: NOME,NOMEMAIOR;
ESTOQUEMAIOR <- 0;
leia(NOME);
enquanto ( NOME <> "@" ) faça:
leia(QTDPROD,QTDVEND);
ESTOQUE <- QTDPROD – QTDVEND;
imprima("Nome: ",NOME);
imprima("Estoque: ",ESTOQUE);
se ( ESTOQUE < 50 ) então
imprima("Estoque em baixa");
fim-se
se (ESTOQUE > ESTOQUEMAIOR ) então
ESTOQUEMAIOR <- ESTOQUE;
NOMEMAIOR <- NOME;
fim-se
leia(NOME);
fim-enquanto
imprima("Produto: ",NOMEMAIOR," com maior estoque: ",ESTOQUEMAIOR);
fim
program l3p100;
var
QTDPROD,QTDVEND,ESTOQUE,ESTOQUEMAIOR: integer;
NOME,NOMEMAIOR: string;
begin
ESTOQUEMAIOR := 0;
write('Nome: ');
readLn(NOME);
while ( NOME <> '@' ) do
begin
write('Quantidade Produzida: ');
readLn(QTDPROD);
write('Quantidade Vendida: ');
readLn(QTDVEND);
ESTOQUE := QTDPROD - QTDVEND;
writeLn('Nome: ',NOME);
writeLn('Estoque: ',ESTOQUE);
if ( ESTOQUE < 50 ) then
writeLn('Estoque em baixa');
if (ESTOQUE > ESTOQUEMAIOR ) then begin
ESTOQUEMAIOR := ESTOQUE;
NOMEMAIOR := NOME; end;
write('Nome: ');
readLn(NOME);
end;
writeLn('Produto: ',NOMEMAIOR,' com maior estoque: ',ESTOQUEMAIOR);
end.
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 24
ESTOQUEMAIOR = 0;
NOME = input('Nome: ','s');
while ( NOME ~= '@' )
QTDPROD = input('Quantidade Produzida: ');
QTDVEND = input('Quantidade Vendida: ');
ESTOQUE = QTDPROD - QTDVEND;
fprintf(1,'Nome: %s\n',NOME);
fprintf(1,'Estoque: %d\n',ESTOQUE);
if ( ESTOQUE < 50 )
disp('Estoque em baixa');
end
if (ESTOQUE > ESTOQUEMAIOR )
ESTOQUEMAIOR = ESTOQUE;
NOMEMAIOR = NOME;
end
NOME = input('Nome: ','s');
end
fprintf(1,'Produto: %s com maior estoque: %d\n',NOMEMAIOR,ESTOQUEMAIOR);
UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 25
Download