Índice

Estrutura de repetição       

De todas as vezes que precisamos repetir uma determinada sequência de comandos, usamos um comando de repetição, o que corresponde a repetir a mesma operação um número X de vezes sem ter de escrever o X vezes

Contador (Pré-requisito)

Utilizamos uma variável que será incrementada a cada repetição, isto é, a cada repetição adicionamos +1 à variável, até um valor de acordo com o número de vezes que queremos repetir

Sintaxe:

 CONT:integer; ( Variável inteira que irá contar o número de repetições )

 CONT:=1; ( Iniciação do contador, ele deve começar com um qualquer valor )

 CONT:= CONT+1; ( Incrementar o contador em +1, repare que em cada repetição ele irá aumentar +1)

Resumo dos Comandos de repetição

(Voltar ao Índice)   

While(fazer enquanto) 

Repeat until (repetir…até)

for … to … do (de … até … faz)

program whileLoop;

var

   a: integer;

begin

   a := 10;

   while  a < 20  do

   begin

      writeln('O valor de a é: ', a);

      a := a + 1;

   end;

end.

program whileLoop;

var

   a: integer;

begin

   a := 10;

   while  a < 20  do

   begin

      writeln('O valor de a é: ', a);

      a := a + 1;

   end;

end.

program forLoop;

var

   a: integer;

begin

   for a := 10  to 20 do

   begin

      writeln('value of a: ', a);

   end;

end.

 

 

Comandos de repetiçãoWhile(fazer enquanto) 

(Voltar ao Índice)   

 

 

 

 

Comandos de repetição

Em Pascal os principais comandos de repetição são

While(fazer enquanto)

Repeat(repetir)

for  (para repetir de um número até outro número}

 

While (enquanto)

Usando o while pedimos ao Pascal para repetir "enquanto" a expressão for verdadeira

Sintaxe

 while <condição> do

  begin

    <comandos>;

    <comandos>;

  end;

 

 

 

 

A) Altera o funcionamento do programa para que comece no nº 5;

 

program whileLoop;

var

   a: integer;

begin

   a := 10;

   while  a < 20  do

   begin

      writeln('O valor de a é: ', a);

      a := a + 1;

   end;

end.

B) Explica o funcionamento do programa; B1) Explica porque razão do código (Resp = 'S') or (Resp = 's')

 

program Historia;

uses crt;

var Resp : char;

begin

clrscr;

write ('Queres ler uma história? [S]im ou [N]ão ');

readln (Resp);

while   (Resp = 'S') or (Resp = 's')    do

begin

writeln ('Era uma vez um gato inglês...');

writeln ('Queres que eu conte outra vez? [S]im ou [N]ão ');

readln (Resp);

end;

writeln ('Adeus...');

end.

 

C) Altera o programa de forma a que o nº 7 possa ser qualquer nº digitado pelo utilizador.

program tabuada;

 uses CRT;

 var

 contad:integer;

 begin

  clrscr;

  contad:=0;  {iniciamos o contador a 0}

  while contad<10 do {Enquanto cont<10, condição é testada a cada repetição}

   begin

    writeln('7 x ',contad,' = ',7*contad);

    contad:=contad+1; {incrementamos o contador a cada repetição}

   end;

  readkey;

 end.

 

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

 

program  media_notas;

 uses crt;

 var

 NOME: string;

 N1, N2, N3, MEDIA: real;

 CONT: integer;

 begin

  clrscr;

       CONT:=0; 

       while CONT<=50 do

         begin

             CONT:=CONT+1;

             write ('Digite o nome: ');

             read (NOME);

             write ('nota 1: ');

             read (N1);

             write ('nota 2: ');

             read (N2);

             write ('Nota 3: ');

             read (N3);

             MEDIA:=(N1+N2+N3)/3;

             if (MEDIA >= 6) then

                begin

                        writeln('O aluno de nome ',NOME,' tem a média ',MEDIA);

                end

             else

                writeln('REPROVADO');

         end;

 end.

 

 

 

 

 

E) Completa e compila o seguinte programa.

 

Program Exibe_Numeros_Inteiros_1a10;
Var
.....N,_______: Integer;
Begin
.....Writeln('Este programa mostra os números naturais a partir de 1 ate um limite a ser digitado pelo utilizador');
... .Writeln('Entre com o valor limite');
... .Readln(______________);
... .N := 1;
... .
While N <= LIMITE Do
..........Begin
..............Writeln(___);
..............N := _____+1;
..........End;
.....Readln;
End.

 

F) Compila o seguinte programa (resolvendo os erros) e descreve, por palavras tuas o seu funcionamento

 

VAR rpta : char;

    a,b,area : double;

 

BEGIN

  rpta:='S';

  While (rpta='s') or (rpta='S') do

    Begin

      Write('Introduz lado a : ');readln(a);

      Write(' Introduz lado b : ');

      area=a*b;

      Writeln('area = ',area:10:3);

      Write('Desea continuar [S] Sim, [N] Nao : ');

      Readln(rpta)

    End;

END.

 

 ENVIAR AO PROFESSOR (PROFCARLOS2006@gmail.com)

A) Altera o funcionamento do programa para que comece no nº 5;

B) Explica o funcionamento do programa; B1) Explica porque razão do código (Resp = 'S') or (Resp = 's')

C) Altera o programa de forma a que o nº 7 possa ser qualquer nº digitado pelo utilizador.

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

 

 

(Voltar ao Índice)

 

 

Comandos de repetição – Repeat until (repetir…até)

(Voltar ao Índice)   

 

 

 

 

Repeat until (repita até)

O comando repeat executa repetidamente uma sequência de comandos "até" (until) que uma dada condição seja verdadeira

Sintaxe:

  repeat

    <comando1>;

    <comando2>;

    <comando3>;

  until <condição>;

Observação: este comando não precisa de begin (início) e end (fim) para demarcar o corpo da repetição

repeat

seqüência A de comandos;

until

condição;

 

repeat - until - são palavras-chaves

condição - é uma expressão lógica

 

Nesta estrutura, a seqüência A de comandos será repetida até que a condição se torne verdadeira.

Quando isto ocorrer, a repetição é interrompida e a sequência de comandos, que estiver logo após a estrutura, passa a ser executada.

Como o until é um delimitador, não é necessário colocar-se um ponto-e-vírgula (;) após o comando que o precede.

 

 

 

 

 

A) Altera o funcionamento do programa para que comece no nº 5;

 

program repeatUntilLoop;

var

   a: integer;

begin

   a := 10;

   repeat

      writeln('value of a: ', a);

      a := a + 1

   until a = 20;

end.

 

B) Explica o funcionamento do programa

program Historia_2;

uses crt;

var Resp : char;

begin

clrscr;

repeat

writeln ('Era uma vez um bolo inglês...');

writeln ('Quer que eu conte outra vez? [S]im ou [N]ão ');

readln (Resp);

until (Resp = 'N') or (Resp = 'n');

writeln ('Adeus...');

end.

 

C) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

 

program tabuada;

 uses CRT;

 var

  num:real;

  cont:integer;

 begin

  repeat

    clrscr;

    write('Digite um número para ver sua tabuada de multiplicação ');

    read(num);

    cont:=0;

      while cont<10 do  {temos aqui uma repetição dentro de outra}

          begin

            writeln(num:4:2,' x ',cont,' = ',(num*cont):6:2);

            cont:=cont+1; {a cada repetição o cont aumenta +1}

          end;

    readkey; {parada para ver o resultado até ser teclado algo}

  until num=0; {condição para parar a repetição principal}

  clrscr;

  write('Foi digitado o número 0! programa encerrado!');

  readkey;

 end.

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

program xxxx;

uses crt;

VAR rpta : char;

    n,i : integer;

BEGIN

 rpta:='S';

 Repeat

   Write('Ingrese n : ');

   readln(n);

   i:=1;

   Repeat

     Writeln(i:3,'corresponde',i*2:10,i*3:10);

     i:=i+1

   Until i>n;

   Write('Desea continuar [S] Si, [N] No : ');

   Readln(rpta)

 Until (rpta<>'s') and (rpta<>'S')

END.

 

 

 

 

 

Prova da importância de “alinhar os programas no compilador”

 

program ex1; // 33 linhas

uses crt;

var a, b : real;

oper : string[1];

valido : boolean;

begin

writeln('CALCULADORA SIMPLES');

write('Valor 1: ');

readln(a);

repeat

write('Operador (+, -, /, *): ');

readln(oper);

until (oper='+') or (oper='-') or (oper='/') or (oper='*');

repeat

write('Valor 2: ');

readln(b);

if (oper='/') and (b=0) then begin

valido := false;

writeln('ERRO! Divisao por zero!');

end else valido := true;

until valido;

write('Resultado: ');

if (oper='+') then writeln(a+b:0:10)

else begin

if (oper='-') then writeln(a-b:0:10)

else begin

if (oper='*') then writeln(a*b:0:10)

else writeln(a/b:0:10);

end;

end;

write('Prima ENTER para fechar...');

readln;

end.

 

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

 

program ex1; // 33 linhas

uses crt;

var a, b : real;

oper : string[1];

valido : boolean;

begin

       writeln('CALCULADORA SIMPLES');

       write('Valor 1: ');

       readln(a);

      

       repeat

             write('Operador (+, -, /, *): ');

             readln(oper);

       until (oper='+') or (oper='-') or (oper='/') or (oper='*');

 

       repeat

             write('Valor 2: ');

             readln(b);

             if (oper='/') and (b=0) then begin

                    valido := false;

                    writeln('ERRO! Divisao por zero!');

             end

             else

                    valido := true;

       until valido;

 

       write('Resultado: ');

             if (oper='+') then writeln(a+b:0:10)

             else

                    begin

             if (oper='-') then writeln(a-b:0:10)

             else

                    begin

             if (oper='*') then writeln(a*b:0:10)

             else

                    writeln(a/b:0:10);

                    end;

                    end;

write('Prima ENTER para fechar...');

readln;

end.

 ENVIAR AO PROFESSOR (PROFCARLOS2006@gmail.com)

A) Altera o funcionamento do programa para que comece no nº 5;

B) Explica o funcionamento do programa; B1) Explica porque razão do código (Resp = 'S') or (Resp = 's')

C) Altera o programa de forma a que o nº 7 possa ser qualquer nº digitado pelo utilizador.

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

D) Compila o seguinte programa e descreve, por palavras tuas o seu funcionamento

 

 

(Voltar ao Índice)

 

 

Exercícios

01 Construa um programa que leia um conjunto de dados contendo altura e sexo (MASCULINO ou FEMININO) de N pessoas e calcule e escreva:

Resolução:

 program alturamf;

 uses CRT;

 var

  quant,cont,cont_m,cont_f:integer;

  sexo,sme_alt,sma_alt:string;

  alt,alt_maior,alt_menor,alt_media,soma_alt,dif:real;

 begin

  {inicializa as variáveis}

  cont_m := 0;

  cont_f := 0;

  alt_menor := 10;

  alt_maior := 0;

  soma_alt  := 0;

  writeln('Qual a quantidade de pessoas?');

  readln(quant); 

  while quant<1 do {obriga a quantidade de pessoas ser positiva}

    begin

       writeln('Quantidade inválida! Digite uma quantidade maior que 1!');

       readln(quant);

    end;

  for cont:=1 to quant do

    begin

      writeln('Qual o sexo da ',cont,'o  pessoa?<m> masculino ou <f> feminino');

      readln(sexo); 

      while (sexo<>'m') and (sexo<>'f') do

         begin

           writeln('Sexo inválido! Digite <m> para masculino ou <f> para feminino!');

           readln(sexo);

         end;

         writeln('Qual a altura da ',cont,'o  pessoa?');

         readln(alt);

         while (alt<0 2) or (alt>2 5) do {obriga uma altura válida}

            begin  {repete até a altura ser válida}

                   writeln('Altura inválida! Digite uma altura entre 0 2 e 2 5!');

                   readln(alt);

            end;

         if alt<alt_menor then {testa a menor altura}

             begin

                   alt_menor:=alt; {guarda a menor altura}

                   sme_alt:=sexo; {guarda o sexo da menor altura}

             end;

         if alt>alt_maior then {testa a maior altura}

             begin

                   alt_maior:=alt; {guarda a maior altura}

                   sma_alt:=sexo; {guarda o sexo da maior altura}

             end;

         if sexo='m' then   {testa se o sexo e m}

             cont_m:=cont_m+1; {conta a quantidade de homens}

         else

             begin

                    cont_f := cont_f+1; {conta a quantidade de mulheres}

                    soma_alt := soma_alt+alt;  {soma a altura feminina}

             end;

    end ;

    clrscr;

    writeln('Resultado:');

    write('A maior altura é: ',alt_maior:2:2,'m  de um');

    if sma_alt='m' then writeln(' homem')

    else writeln('a mulher');

    writeln('A média de alturas entre as mulheres é :',soma_alt/cont_f:2:2);

    writeln('o número de homens é: ',cont_m:3);

    write('A diferença percentual entre homens e mulheres é: ');

    dif:=(cont_m/quant)*100-(cont_f/quant)*100;

    if dif>0 then write(dif:2:2,'% a mais de homens');

    else write(abs(dif):2:2,'% a mais de mulheres');

    readkey;

 end.