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 Prof. André Luiz Sozzi
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 CONT CONT + 1 FimEnquanto {Verificando se o número é primo ou não} Se VEZES = 2 então Escreva O número é primo Escreva O número não é primo
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} CONT CONT + 1 FimEnquanto {Verificando se o número é primo ou não} Se PRIMO então {PRIMO = Verdadeiro} Escreva O número é primo Escreva O número não é primo
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} FimPara {Verificando se o número é primo ou não} Se PRIMO então {PRIMO = Verdadeiro} Escreva O número é primo Escreva O número não é primo
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 Escreva O número não é primo
{ 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'); { 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 end; PRIMO := False; Break; { Saia da Repetição - otimização} if PRIMO then writeln(num, ' eh Primo') else writeln(num, ' naum eh Primo'); readln(stop); end. 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); end.
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 {Determinando o BOI com menor peso} Se PESO < MAGRO então MAGRO PESO IDTM IDT 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); end.
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 COMISSAOPB 2 x TVPB {Calculando a Comissão para TVs coloridas vendidas} Se TVCOR >= 10 então COMISSAOCOR 10 x TVCOR COMISSAOCOR 5 x TVCOR {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 {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 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......
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 Até SEXO EM [ M, F, "m", "f"]
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 writeln('sexo Inválido - Informe o Sexo (M-F)'); readln(sexo); end; //not (SEXO IN ['M', 'F']) { writeln('sexo Válido'); repeat writeln('informe o Sexo (M-F)'); readln(sexo); until (SEXO = 'M') or (SEXO = 'F'); writeln('sexo Válido'); //(SEXO IN ['M', 'F']) } end.
Algoritmo_Primeiro e Segundo Maiores Valores declare NUM, PNUM, SNUM, TREPROV, CONT numérico PNUM 0 Para CONT 1 Até 5 Passo 1 Escreva Informe o número Leia NUM {Verificando se nº é maior que Primeiro} Se NUM > PNUM então SNUM PNUM PNUM NUM {Verificando se nº é maior que Segundo} Se NUM > SNUM então SNUM NUM FimPara {Exibindo Primeiro e Segundo Maiores números} Escreva Primeiro maior valor:, PNUM Escreva Segundo maior valor:, SNUM
Algoritmo_Qtas ocorrências do 1º e 2º Maiores Valores declare NUM, PNUM, SNUM, TREPROV, CONT, QTDP, QTDS numérico PNUM 0 QTDP 0 Para CONT 1 Até 5 Passo 1 Leia NUM {Verificando se nº é maior que Primeiro} Se NUM > PNUM então SNUM PNUM PNUM NUM QTDS QTDP QTDP 1 {Verificando se nº é igual ao Primeiro} Se NUM = PNUM então QTDP QTDP + 1 {Verificando se nº é maior que Segundo} Se NUM > SNUM então SNUM NUM QTDS 1 {Verificando se nº é = ao Segundo} Se NUM = SNUM então QTDS QTDS + 1 FimPara {Exibindo QTD ocorrências do 1º e 2º Maiores nºs}
Escreva QTD Primeiro maior valor:, QTDP Escreva QTD Segundo maior valor:, QTDS
REPETIÇÃO CONTROLADA POR COM FLAG Algoritmo declare Variável_Flag declare Variáveis_Conjunto_Dados... Leia Variável_Flag Enquanto Variável_Flag <> Valor_Flag Leia Variáveis_Conjunto_Dados......... Leia Variável_Flag FimEnquanto......
Algoritmo-17 declare NT1, NT2, NT3, NT4, FREQ, NF, TAPROV, TREPROV, CONT numérico declare NOME, SIT literal TAPROV 0 TREPROV 0 Para CONT 1 Até 5 Passo 1 Escreva Informe os dados de um aluno Leia NOME, NT1, NT2, NT3, NT4, FREQ {Calculando a média do aluno} NF (NT1 + NT2 + NT3 + NT4) / 4 {Verificando a média e a frequência para determinar sua situação e calcular totais} Se (NF >= 6) e (FREQ >= 40) então SIT APROVADO TAPROV TAPROV + 1 SIT REPROVADO TREPROV TREPROV + 1 {Exibindo os dados do aluno} Escreva NOME, FREQ, NF, SIT FimPara {Exibindo totais solicitados} Escreva Total de Alunos Aprovados, TAPROV Escreva Total de Alunos Reprovados, TREPROV
EXERCÍCIOS COM FLAG Algoritmo-21 declare COMODO literal declare AREA, CLASSE, LARG, COMP, POT, NLAMP, TOTLAMP, TOTPOT numérico {Inicializando variáveis acumulativas} TOTLAMP 0 TOTPOT 0 Escreva Informe o Cômodo - VAZIO sai programa Leia COMODO Enquanto COMODO <> VAZIO Escreva Informe os dados do Cômodo Leia CLASSE, LARG, COMP AREA LARG x COMP {Determinando a potência do cômodo} Caso CLASSE de 1 : POT AREA x 15 2 : POT AREA x 18 3 : POT AREA x 20 FimCaso {Calculando o número de lâmpadas do cômodo} NLAMP QUOCIENTE(POT, 60) Se NLAMP <> POT / 60 então NLAMP NLAMP + 1 Escreva COMODO, AREA, POT, NLAMP {Calculando os totais} TOTLAMP TOTLAMP + NLAMP TOTPOT TOTPOT + POT Escreva Informe o Cômodo - VAZIO sai programa Leia COMODO FimEnquanto {Exibindo os totais} Escreva Total de Potência da Residência é:, TOTPOT Escreva Total de Lâmpadas para a Residência é:, TOTLAMP
Algoritmo-27-A declare INSC, TP1, TP2, TP3, TE1, TE2, TE3, MAIOR, DELTA, VENC, PONTOS1, TOT, PONTOS2, PONTOS3 numérico MAIOR 0 Escreva Informe os três tempos padrões} Leia TP1, TP2, TP3 Escreva Informe a Inscrição - 99999 Sai Prg Leia INSC Enquanto INSC <> 99999 {Lendo os tempos da equipe nas três etapas} Leia TE1, TE2, TE3 {Calculando pontos das etapas} DELTA ABS(TP1 TE1) Se DELTA < 3 então PONTOS1 100 Se DELTA > 5 então PONTOS1 70 PONTOS1 80 DELTA ABS(TP2 TE2) Se DELTA < 3 então PONTOS2 100 Se DELTA > 5 então PONTOS2 70 PONTOS2 80 DELTA ABS(TP3 TE3) Se DELTA < 3 então PONTOS3 100 Se DELTA > 5 então PONTOS3 70 PONTOS3 80 {Calculando total de pontos da equipe} TOT PONTOS1 + PONTOS2 + PONTOS3 {Determinando a equipe vencedora} Se TOT > MAIOR então MAIOR TOT VENC INSC {Exibindo dados da equipe} Escreva INSC, PONTOS1, PONTOS2, PONTOS3, TOT Escreva Informe a Inscrição - 99999 Sai Prg Leia INSC FimEnquanto Escreva A equipe vencedora é:, VENC /
Algoritmo-27-B declare INSC, TP1, TP2, TP3, TEQ, PONTOS, TOT MAIOR, DELTA, VENC, CONT numérico MAIOR 0 Escreva Informe os três tempos padrões} Leia TP1, TP2, TP3 Escreva Informe a Inscrição - 99999 Sai Prg Leia INSC Enquanto INSC <> 99999 TOT 0 {Lendo os tempos da equipe nas três etapas} Para CONT 1 até 3 passo 1 Leia TEQ Caso CONT de 1 : DELTA ABS(TP1 TEQ) 2 : DELTA ABS(TP2 TEQ) 3 : DELTA ABS(TP3 TEQ) FimCaso {Calculando pontos da etapa} Se DELTA < 3 então PONTOS 100 Se DELTA > 5 então PONTOS 70 PONTOS 80 {Calculando total de pontos da equipe} TOT TOT + PONTOS Escreva "Pontos Etapa ", CONT, " = ", PONTOS FimPara {Determinando a equipe vencedora} Se TOT > MAIOR então MAIOR TOT VENC INSC {Exibindo dados da equipe} Escreva INSC, TOT Escreva Informe a Inscrição - 99999 Sai Prg Leia INSC FimEnquanto Escreva A equipe vencedora é:, VENC