Revisões Ciclo While

 

Comandos de repetiçãoWhile(fazer enquanto) 

(Voltar ao Índice)   

 

 

 

 

a) Explica o funcionamento do programa;
a1) Elabora um enunciado para o programa

 

{7. Faça uma algoritmo para ler salários, onde o Flag será um Salário igual a 0 e escreva quais os três

maiores valores dos salários lidos.}

program salariosLer;

uses crt;

var

i,flag,primeiro,segundo,terceiro,auxiliar:integer;

begin

writeln('********************');

writeln('* Salarios *');

writeln('********************');

writeln('digite no minimo 3 valores de salario');

flag:=1;

i:=0;

while (flag<>0) do

begin

i:=i + 1;

writeln('---> 0 para sair <----');

writeln('digite o salario:');

repeat

readln(flag);

if (flag <0) then

begin

writeln('Invalido! deve ser maior que 0.');

end;

until flag>=0;

if (flag <> 0) then

begin

if (i <= 3) then

begin

case i of

1: primeiro:=flag;

2: segundo:=flag;

3: terceiro:=flag;

end;

end else begin

if (flag >= primeiro) then

begin

auxiliar:=primeiro;

primeiro:=flag;

terceiro:=segundo;

segundo:=auxiliar;

end else begin

if (flag >=segundo) then

begin

auxiliar:=segundo;

segundo:=flag;

terceiro:=auxiliar;

end else begin

if (flag >= terceiro) then

begin

terceiro:=flag;

end;

end;

end;

end;

//ordenação de 3 numeros

if (i =3) then

begin

if(primeiro > segundo)or( primeiro > terceiro)then

begin

if(terceiro > segundo) then

begin

auxiliar:=primeiro;

primeiro:=segundo;

segundo:=auxiliar;

end else begin

auxiliar:=primeiro;

primeiro:=terceiro;

terceiro:=auxiliar;

end;

end;

if(segundo > terceiro)then

begin

auxiliar:=segundo;

segundo:=terceiro;

terceiro:=auxiliar;

end;

// troca primeiro com terceiro

auxiliar:=primeiro;

primeiro:=terceiro;

terceiro:=auxiliar;

end;

end else begin

i:=i-1;

if (i<3)then

begin

writeln('ERRO: quantidade de salario menor que 3');

end else begin

writeln('maior salario digitado = ',primeiro);

writeln('segundo maior salario digitado = ',segundo );

writeln('terceiro maior salario digitado = ',terceiro);

end;

end;

end;

readkey;

end.

B) Explica o funcionamento do programa;
B1) Elabora um enunciado para o programa

 

 

program exercicio13; { Repeticao com While e If }

uses crt;

var altura, maior : real;

 nome, nome_m : string [15];

 num : integer;

 

begin

 altura := 0;

 nome := ' ';

 maior := 0;

 num := 0;

 nome_m := ' ';

 

 clrscr;

 while upcase(nome) <> 'FIM' do { Upcase: transforma p/ maiúscula }

 begin

 writeln;

 write ('Nome: ');

 readln (nome);

 writeln;

 if upcase(nome) = 'FIM' then

 begin

 writeln ('Total de mocas no concurso: ',

num);

 writeln ('Moca mais alta: ', nome_m);

 writeln ('Altura: ', maior:3:2);

 writeln;

 end

 else

 begin

 write ('Altura: ');

 readln (altura);

 writeln;

 num := num + 1;

 if altura > maior then

 begin

 maior := altura;

 nome_m := nome;

 end

 ;

 end

 ;

 end

 ;

end.

 

Exercícios

Tente fazer os exercícios, depois veja uma das soluções mais abaixo na página.

1) Construir um programa em Pascal que calcule a média de vários valores inteiros positivos, lidos externamente. O final da leitura acontecerá quando for lido um valor negativo.

2) Escrever um programa que leia uma quantidade desconhecida de números e conte quantos deles estão nos seguintes intervalos: (0 a 25), (26 a 50), (51 a 75), (76 a 100). A entrada de dados deve terminar quando for lido um número negativo.

3) Escrever um programa que leia um número N que indica quantos valores devem ser lidos a seguir. Para cada número lido mostre, como resultado, o valor lido e o fatorial deste valor.

4) Escreva um programa que lê dois números N1 e N2. Como resultado, calcule quantos números ímpares existem entre N1 e N2. Supor que N1 e N2 não entram no cálculo.

5) Fulano tem 1,50 metros e cresce 2 cm por ano, enquanto Ciclano tem 1,10 metros e cresce 3 cm por ano. Construa um programa que calcule e imprima quantos anos serão necessários para que Ciclano seja maior que Fulano.

 

 

 

 

 

 

 ENVIAR AO PROFESSOR (PROFCARLOS2006@gmail.com)

 

 

 

Resolução

 

1)

PROGRAM MEDIA;

Var

    valor,cont:integer;

    soma:real;

Begin

    soma:=0;

    cont:=0;

    writeln('Digite um valor positivo(negativo pra terminar)');

    read(valor);

    while(valor>=0)do

        begin

            soma:=soma+valor;

            cont:=cont+1;

            writeln('Digite um valor positivo(neg.para terminar)');

            read(valor);

        end;

    if cont>0

        then writeln('Media=',soma/cont)

        else writeln('Nenhum valor positivo foi digitado');

End.

 

2)

PROGRAM INTERVALOS;

Var

    valor,interv1,interv2,interv3,interv4:integer;

Begin

    interv1:=0;

    interv2:=0;

    interv3:=0;

    interv4:=0;

    writeln('Digite um valor positivo(neg. para terminar)');

    read(valor);

    while(valor>=0)do

        begin

            if valor<=25

                then interv1:=interv1+1

                else begin

                        if valor<=50

                            then interv2:=interv2+1

                            else begin

                                    if valor<=75

                                        then interv3:=interv3+1

                                        else begin

                                                if valor<=100

                                                    then interv4:=interv4+1;

                                                end

                                    end

                        end;

            writeln('Digite um valor positivo(neg. para terminar)');

            read(valor);

        end;

    writeln('(0-25):',interv1,',(26-50):',interv2,',(51-75):',interv3,',(76-100):',interv4);

End.

 

3)

PROGRAM FATORIAL;

Var

    n,valor,cont,cont2,fatorial:integer;

Begin

    writeln('Quantos numeros devem ser lidos?');

    read(n);

    for cont:=1 to n do

        begin

            writeln('Digite o número');

            read(valor);

            while(valor<0) do

                begin

                    writeln('Nao exite fatorial de nr. negativo');

                    writeln('Digite o número');

                    read(valor);

                end;

            fatorial:=1;

            if valor>1

                then begin

                        for cont2:=valor downto 1 do

                            begin

                                fatorial:=fatorial*cont2;

                            end;

                        end;

            writeln(fatorial);

                       end;

End.

 

4)versão otimizada

PROGRAM IMPAR;

Var

    n1,n2,cont,qto_imp,aux:integer;

Begin

    qto_imp:=0;

    writeln('Digite os nrs.');

    read(n1,n2);

    if n1>n2

        then begin

                aux:=n1;

                n1:=n2;

                n2:=aux;

                end;

    if (n1 mod 2)=1

        then n1:=n1+2

        else n1:=n1+1;

    cont:=n1;

    while(cont<n2) do

        begin

            cont:=cont+2;

            qto_imp:=qto_imp+1;

        end;

    writeln('Quantidade de impares:',qto_imp);

End.

 

5)

PROGRAM ALTURA;

Var

    anos,altful,altci:integer;

Begin

    altful:=150;

    altci:=110;

    anos:=0;

    while(altful>=altci)do

        begin

            altful:=altful+2;

            altci:=altci+3;

            anos:=anos+1;

        end;

    writeln('Anos necessarios:',anos);

End.