Pascal/Estrutura de repetição: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Jocile (discussão | contribs)
Nova página: {{Navegação|Pascal|../Estrutura Condicional/|../Estrutura de Dados/}} = Estrutura de repetição = Toda vez que precisamos repetir determinado número de vezes uma det...
(Sem diferenças)

Revisão das 15h23min de 19 de agosto de 2007

acima: Pascal


Estrutura de repetição

Toda vez que precisamos repetir determinado número de vezes uma determinada seqüência de comandos, usamos um laço de repetição, que corresponderia repetir o mesmo trecho um número X de vezes sem ter de escrever o mesmo trecho X vezes.

Exemplo: Calcular a média de 50 alunos (sem repetição).

program media_notas;
var
NOME: string;
N1, N2, N3, MEDIA: real;
begin
{1º ALUNO}
   .   read(NOME,N1,N2,N3);
   .   if (N1>=0)  and  (N2>=0)  and  (N3>=0) and (N1<=10.00) and (N2<=10.00) and (N3<=10.00) then
            begin
   .     .    . MEDIA :=(N1+N2+N3)/3;
   .     .    . writeln( “O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são aceitas notas negativas.”);
   .     .  end;
{2º ALUNO}
   .   read(NOME,N1,N2,N3);
   .   if (N1>=0)  and  (N2>=0)  and  (N3>=0) and (N1<=10.00) and (N2<=10.00) and (N3<=10.00) then
            begin
   .     .    . MEDIA :=(N1+N2+N3)/3;
   .     .    . writeln( “O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são aceitas notas negativas.”);
   .     .  end;
{3º ALUNO}
   .
   .
{50º ALUNO}
   .   read(NOME,N1,N2,N3);
   .   if (N1>=0)  and  (N2>=0)  and  (N3>=0) and (N1<=10.00) and (N2<=10.00) and (N3<=10.00) then
            begin
   .     .    . MEDIA :=(N1+N2+N3)/3;
   .     .    . writeln( “O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .     .  end
   .   else
   .     .  begin
   .     .    .  writeln(“Não são aceitas notas negativas.”);
   .     .  end;
end.

Contador

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

No exemplo acima, como queremos 50 alunos, contaríamos 50 repetições.

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 algum valor )
CONT: CONT+1; ( Incrementar o contador em +1, repare que em cada repetição ele irá aumentar +1) 

Testes lógicos

Usamos testes lógicos para saber quando parar a repetição, ou seja, estabelecemos uma condição para a repetição continuar, caso contrário o programa ficaria preso na repetição eternamente. Por exemplo, usando o contador, a cada repetição testamos o número do contador até que ele alcance quantidade desejada, caso o contador atinja a quantidade de vezes que queremos repetir, o loop (repetição) pára.

Exemplo: programa para fazer a tabuada de multiplicação do número 7:

program tabuada;
uses CRT;
var
contad:integer;
begin
 clrscr;
 contad:=0;       {iniciamos o contador declarando seu primeiro valor}
 while cont<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.

Comandos de repetição

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

While(faça enquanto)
Repeat(repita)
for  (para repetir de um número até algum número}

While (enquanto)

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

Sintaxe

while <condição> then
 begin
   <comandos>;
   <comandos>;
 end;

Veja o exemplo acima usando while:

program  média_notas;
var
NOME: string;
N1, N2, N3, MEDIA: real;
CONT: integer;
begin
   .  CONT:=0;  
   .  while CONT<=50 then
   .    begin
   .    .   CONT:=CONT+1;
   .    .   read(NOME,N1,N2,N3);
   .    .   if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10.00) and (N2<=10.00) and (N3<=10.00) then;
   .    .    .   begin
   .    .    .     .  MEDIA:=(N1+N2+N3)/3;
   .    .    .     .  writeln(“O aluno de nome “,NOME,” tem a média “,MEDIA,” em suas notas.”);
   .    .    .   end
   .    .   else
   .    .    .   writeln(“Não são aceitas notas negativas.”);
   .    end;
end.

Repeat (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 and (fim) para demarcar o corpo da repetição.

Exemplo: Faça um programa para pedir um número, em seguida escrever uma tabuada de multiplicação deste número, caso for digitado o número 0, parar o programa.

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 taclado algo}
 until num=0; {condição para parar a repetição principal}
 clrscr;
 write('Foi digitado o número 0! programa encerrado!');
 readkey;
end.

for to (para de até)

O comando for, diferentemente dos comandos de repetição repeat e while, permite que uma sequência de comandos seja executada um número definido de vezes. A variável usada para contador já recebe um valor inicial e é incrementada pelo comando.

Sintaxe:

for contador:=ValorInicial to ValorFinal do
  begin
   comandos
  end;

Exemplo: Programa para calcular a média de 3 notas de 10 alunos:

program  media_notas;
var
NOME:string;
N1,N2,N3,MEDIA:real;
CONT:integer;
begin
  FOR CONT:=1 to 10 do         {para cont de 1 a 10 faça}
   begin
     write('Digite o nome e as 3 notas do ',cont,'o. aluno ');
     read(NOME,N1,N2,N3);
     if (N1>=0) and (N2>=0) and (N3>=0) and (N1<=10.00) and (N2<=10.00) and (N3<=10.00) then
       begin
         MEDIA:=(N1+N2+N3)/3;
         writeln('O aluno de nome ',NOME,' tem a média ',MEDIA,' em suas notas.');
       end
     else
       begin
         writeln('Notas invalidas!');
       end;
   end;
end.