INSTITUTO FEDERAL DE SERGIPE
COORDENADORIA DE INFORMÁTICA
LÓGICA DE PROGRAMAÇÃO
SOLUÇÃO EXERCÍCIOS DE REPETIÇÃO
9-15-17-30 e 20 com alteração
Repita e crítica
Repetição com Flag
Estrutura de Repetição - Exercícios da Apostila
Algoritmo-9-a
declare NUM, CONT, VEZES numérico
Escreva “Informe um número”
Leia NUM
VEZES
←
←
←
←
0
CONT
←
←
←
←
1
Enquanto CONT <= NUM
Se RESTO(NUM, CONT) = 0 então
VEZES
←
←
←
←
VEZES + 1
FimSe
CONT
←
←
←
←
CONT + 1
FimEnquanto
{Verificando se o número é primo ou não}
Se VEZES = 2 então
Escreva “ O número é primo”
senão
Escreva “ O número não é primo”
FimSe
Algoritmo-9-b
declare NUM, CONT numérico
declare PRIMO lógico
Escreva “Informe um número”
Leia NUM
PRIMO
←
←
←
←
Verdadeiro
CONT
←
←
←
←
2
Enquanto CONT <= NUM / 2 {otimização}
Se RESTO(NUM, CONT) = 0 então
PRIMO
←
←
←
←
Falso
CONT
←
←
←
←
NUM {Otimização}
FimSe
CONT
←
←
←
←
CONT + 1
FimEnquanto
{Verificando se o número é primo ou não}
Se PRIMO então
{PRIMO = Verdadeiro}
Escreva “ O número é primo”
senão
Escreva “ O número não é primo”
FimSe
Algoritmo-9-b-Para
declare NUM, CONT numérico
declare PRIMO lógico
Escreva “Informe um número”
Leia NUM
PRIMO
←
←
←
←
Verdadeiro
Para CONT
←
←
←
←
2 até Quociente(NUM, 2) passo 1
Se RESTO(NUM, CONT) = 0 então
PRIMO
←
←
←
←
Falso
Saia da Repetição {Otimização}
FimSe
FimPara
{Verificando se o número é primo ou não}
Se PRIMO então
{PRIMO = Verdadeiro}
Escreva “ O número é primo”
senão
Escreva “ O número não é primo”
FimSe
Algoritmo-9-c
declare NUM, CONT numérico
declare PRIMO lógico
Escreva “Informe um número”
Leia NUM
PRIMO
←
←
←
←
Verdadeiro
CONT
←
←
←
←
2
Enquanto (CONT <= NUM / 2) e (PRIMO)
PRIMO
←
←
←
←
RESTO(NUM, CONT) <> 0
CONT
←
←
←
←
CONT + 1
FimEnquanto
{Verificando se o número é primo ou não}
Se PRIMO então
{PRIMO = Verdadeiro}
Escreva “ O número é primo”
senão
Escreva “ O número não é primo”
FimSe
{ Algoritmo-9-b} var
Stop : Char; NUM, CONT : integer; PRIMO : boolean; begin writeln('Digite um número'); readln(NUM); PRIMO := True; CONT := 2;
while CONT <= NUM div 2 do begin if NUM mod CONT = 0 then begin PRIMO := False;
CONT := NUM; { otimização} end;
CONT := CONT + 1; end;
if PRIMO then {PRIMO = True}
writeln(NUM, ' eh Primo') else
writeln(NUM, ' naum eh Primo'); readln(Stop);
end.
{ Algoritmo-9-b-Para} var
Stop : Char; NUM, CONT : integer; PRIMO : boolean; begin
writeln('Digite um número'); readln(NUM);
PRIMO := True;
for CONT := 2 To NUM div 2 do {begin desnecessário}
if NUM mod CONT = 0 then begin PRIMO := False;
Break; { Saia da Repetição - otimização} end;
if PRIMO then
writeln(NUM, ' eh Primo') else
writeln(NUM, ' naum eh Primo'); readln(Stop);
end.
{ Algoritmo-9-c} var
Stop : Char; NUM, CONT : integer; PRIMO : boolean; begin writeln('Digite um número'); readln(NUM); PRIMO := True; CONT := 2;
while (CONT <= NUM div 2) and (Primo) do begin PRIMO := NUM mod CONT <> 0;
CONT := CONT + 1; end;
if PRIMO then {PRIMO = True} writeln(NUM, ' eh Primo')
else
writeln(NUM, ' naum eh Primo'); readln(Stop);
Correção dos exercícios 15 - 17- 28 – 30 - 20
Algoritmo-15
declare IDT, PESO, IDTG, GORDO, IDTM, MAGRO,
CONT numérico
{Inicializando as variáveis que armazenarão o maior e o menor peso}
GORDO
←
0
MAGRO
←
10000000000
Para CONT
←
1 Até 90 Passo 1
Escreva “Informe a identificação e o peso do boi”
Leia IDT, PESO
{Determinando o BOI com maior peso}
Se PESO > GORDO então
GORDO
←
PESO
IDTG
←
IDT
FimSe
{Determinando o BOI com menor peso}
Se PESO < MAGRO então
MAGRO
←
PESO
IDTM
←
IDT
FimSe
FimPara
{Exibindo resultados}
Escreva “O boi mais Gordo: ”, IDTG, GORDO
Escreva “O boi mais Magro: ”, IDTM, MAGRO
var
Stop : Char;
IDT, PESO, IDTG, GORDO, IDTM, MAGRO, CONT: integer; begin
GORDO := 0;
MAGRO := 10000000; for CONT := 1 To 5 do begin
writeln('Informe a IDT e o peso do Boi'); readln(IDT, PESO);
{Determinando o BOI com maior peso} if PESO > GORDO then begin
GORDO := PESO; IDTG := IDT; end;
{Determinando o BOI com menor peso} if PESO < MAGRO then begin
MAGRO := PESO; IDTM := IDT; end;
end; { for CONT := 1 To 5} {Exibindo resultados}
writeln('O boi mais Gordo: ', IDTG, ' com o peso de ', GORDO); writeln('O boi mais Magro: ', IDTM, ' com o peso de ',MAGRO); readln(Stop);
Algoritmo-28
declare CONT, INSC, SALFIXO, TVPB, TVCOR, SALLIQ, INSS,
SALTOTAL,COMISSAOPB,COMISSAOCOR numérico
declare NOME literal
Para CONT
←
1 Até 20 Passo 1
Escreva “Informe os dados do Vendedor”
Leia INSC, NOME, SALFIXO, TVPB, TVCOR
{Calculando o valor do INSS}
INSS
←
SALFIXO x 0,08
{Calculando a Comissão para TVs preto e branco vendidas}
Se TVPB >= 20 então
COMISSAOPB
←
4 x TVPB
senão
COMISSAOPB
←
2 x TVPB
FimSe
{Calculando a Comissão para TVs coloridas vendidas}
Se TVCOR >= 10 então
COMISSAOCOR
←
10 x TVCOR
senão
COMISSAOCOR
←
5 x TVCOR
FimSe
{Calculando o Salário Total}
SALTOTAL
←
SALFIXO + COMISSAOPB +
COMISSAOCOR – INSS
{Calculando o Salário Líquido}
SALLIQ
←
SALTOTAL
Se SALTOTAL >= 800 então
SALLIQ
←
SALTOTAL x 0.95
FimSe
{Exibindo os dados para o Vendedor}
Escreva INSC, SALTOTAL, SALLIQ
FimPara
Algoritmo-20-Alterado
declare PRECO, NING, LUCRO,
MAIOR, MPRECO, MING
numérico
NING
←
120
MAIOR
←
0
Para PRECO
←
100 até 10 Passo -5
LUCRO
←
PRECO * NING - 500
{Determando melhor preço}
Se LUCRO > MAIOR então
MAIOR
←
LUCRO
MING
←
NING
MPRECO
←
PRECO
FimSe
Escreva PRECO, NING, 500, LUCRO
NING
←
NING + 20
FimPara
Escreva “Melhor Lucro: ”, MAIOR
Escreva “Melhor Preço de Venda: ”, MPRECO
Escreva “Conseguindo vender: ”, MING
Algoritmo-30
declare CONTCLI, SALDOINICIAL, N, VALOR,
SALDOFINAL,CONTMOV numérico
declare TIPO literal
Para CONTCLI
←
1 Até 50 Passo 1
Escreva “Informe o Saldo Inicial do Cliente”
Leia SALDOINICIAL
Escreva “Informe a quantidade de movimentos"
Leia N
SALDOFINAL
←
SALDOINICIAL
Para CONTMOV
←
1 Até N Passo 1
Repita
Escreva “Informe o Tipo do Movimento”
Leia TIPO
Até (TIPO = “D”) ou (TIPO = “C”)
Escreva “informe o Valor do Movimento”
Leia VALOR
{Calculando o Saldo Final}
Caso TIPO de
“C” : SALDOFINAL
←
SALDOFINAL + VALOR
“D” : SALDOFINAL
←
SALDOFINAL – VALOR
FimCaso
FimPara
Escreva “O Saldo Final é: ”, SALDOFINAL
FimPara
var
Stop, TIPO : Char; CONTCLI, N, CONTMOV : integer; VALOR, SALDOINICIAL, SALDOFINAL : real; begin
for CONTCLI := 1 to 5 do begin
writeln('Informe o Saldo Inicial do Cliente - ', CONTCLI); readln(SALDOINICIAL);
writeln('Informe a quantidade de movimentos'); readln(N);
SALDOFINAL := SALDOINICIAL; for CONTMOV := 1 to N do begin repeat
writeln('Informe o Tipo do Movimento - ',CONTMOV); readln(TIPO);
until (TIPO = 'D') or (TIPO = 'C');
writeln('Informe o Valor do Movimento - ', CONTMOV); readln(VALOR);
{Calculando o Saldo Final}
Case TIPO of
'C' : SALDOFINAL := SALDOFINAL + VALOR; 'D' : SALDOFINAL := SALDOFINAL - VALOR; end;
end;
writeln('O Saldo Final = ', SALDOFINAL:6:2); end;
readln(Stop); end.
Estrutura de Repetição REPITA – Formato
Algoritmo
Repita F {Lê-se: Repita até ser verdade }
...
...
...
Até Condição
V ...
...
FimAlgoritmo
Exemplos da comparação da estrutura Enquanto com a Repita:
Exemplo-1:
{Criticando o dado SEXO com a estrutura Enquanto}
Escreva “Informe o Sexo”
Leia Sexo
Enquanto (SEXO <> “M”) e (SEXO <> “F”)
Escreva “Informe o Sexo”
Leia Sexo
FimEnquanto
{Criticando o dado SEXO com a estrutura Repita}
Repita
Escreva “Informe o Sexo”
Leia Sexo
Até (SEXO = “M”) ou (SEXO = “F”)
{Criticando o dado SEXO com a estrutura Repita e operador
de persistência EM}
Repita
Escreva “Informe o Sexo”
Leia Sexo
Exemplo-2:
{Criticando o dado SALARIO com a estrutura Enquanto}
Escreva “Informe o Salário”
Leia SALARIO
Enquanto SALARIO <= 0
Escreva “Informe o Salário”
Leia SALARIO
FimEnquanto
{Criticando o dado SALARIO com a estrutura Repita}
Repita
Escreva “Informe o Salário”
Leia SALARIO
Até SALARIO > 0
repeat .... .... .... until Condição; var SEXO : Char; begin writeln('Informe o Sexo (M-F)'); readln(SEXO);while (SEXO <> 'M') and (SEXO <> 'F') do begin //not (SEXO IN ['M', 'F']) writeln('Sexo Inválido - Informe o Sexo (M-F)');
readln(SEXO); end; writeln('Sexo Válido'); { repeat writeln('Informe o Sexo (M-F)'); readln(SEXO);
until (SEXO = 'M') or (SEXO = 'F'); //(SEXO IN ['M', 'F']) writeln('Sexo Válido');
} end.