Buscar

listaexerc-algoritmos-repeticao-solucao-prof

Prévia do material em texto

UFMG – ICEx – DCC – Programação de Computadores – 1º. Sem 2005 – David Menoti 1 
Universidade Federal de Minas Gerais - UFMG 
Instituto de Ciências Exatas - ICEx 
Disciplina: Programação de Computadores 
Professor: David Menoti (menoti@dcc.ufmg.br) 
Monitor: João Felipe Kudo (joao.felipe.kudo@terra.com.br) 
 
Lista de Exercícios – 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 2 
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 3 
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 4 
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 5 
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 6 
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 ( C <= A ) e ( C <= B ) faça: 
 se (A mod C = 0) e (B mod C = 0) então 
 SIT <- falso; 
 fim-se 
 C <- C + 1; 
 fim-enquanto 
 se ( SIT ) então 
 imprima("A e B são primos entre si "); 
 senão 
 imprima("A e B não são primos entre si"); 
 fim-se 
fim 
 
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 7 
40) Escreva um algoritmo em PORTUGOL que calcule o m.d.c. (máximo divisorcomum) 
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 8 
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 ) { 1o, 4o, 7o , ... } 
 else 
 if ( C mod 3 = 2 ) then 
 writeLn( ( C div 3 ) + 4 ) { 2o, 5o, 8o , ... } 
 else 
 writeLn( ( C div 3 ) + 3 ); { 3o, 6o, 9o , ... } 
 end; 
end. 
 
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 9 
50) Faça um algoritmo que: 
- leia um número real X do teclado; 
- determine e imprima o seguinte somatório: 
 
L++−+−=
!4!3!2!1
XXXX
XS 
 
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 10 
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 11 
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 12 
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 : 3 
 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 13 
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 14 
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 15 
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 16 
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 17 
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 18 
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 19 
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 20 
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 > 0 ) faça: 
 C <- 1; 
 enquanto ( C * C <= NUM ) faça: 
 se ( C * C = NUM ) então 
 imprima("O número digitado é quadrado perfeito!"); 
 fim-se 
 C <- C + 1; 
 fim-para 
 leia(NUM); 
 fim-enquanto 
fim 
 
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 21 
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 22 
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 23 
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 24 
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 25 
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);

Continue navegando