Aula 11: Ciclos II: While ... Do e Repeat ... Until


Aula

traduzido pelo Eduardo Bentes

While ... Do

Os ciclos abordados nesta aula, while-do e repeat-until são utilizados para repetições que não são exactamente contáveis.Normalmente usamos estes ciclos quando  não é claro a altura em que o ciclo terminará, por exemplo quando o controlo das variáveis são alteradas no interior do ciclo (é estritamente desaconselhado em ciclos For ).Também, quando queremos o ciclo sobre algo com variáveis de vírgula flutuante utilizamos os ciclos while-do e repeat-until.

O formato geral de um ciclo  while-loop é
 

 While condition do 
   Instruction;
 

Esta estrutura repete a instrução enquanto a condição é verdadeira (true). A  condição (condition) é qualquer condição que resulte num valor booleano (True ou False), tal como foi discutido na  aula 8. Isto pode ser uma comparação, ou qualquer outra coisa (informação num ficheiro?se o utilizados pressionou uma tecla?, etc.). Nota que a estrutura while-do não atribui um valor inicial  a qualquer variável tal como o ciclo for o fazia.Logo, temos que fazê-lo por nós mesmos.
Exemplo:
 

código do programa

PROGRAM WhileExample; 

Var x: real;

begin
  x := 0.0;
  While (x<=1.0) do
    begin
      WriteLn(x:0:1);
      x := x + 0.1;
    end;
end.


  saída

  0.0 
  0.1
  0.2
  0.3
  0.4
  0.5
  0.6
  0.7
  0.8
  0.9
  1.0



repeat ... until

A estrutura repeat-until é muito similar à estrutura while-do.A estrutura repeat-until repete uma instrução (ou instruções), até que a condição é verificada.O formato geral do ciclo repeat- until é:
 
 Repeat
  Instruction;
 until condition
 
Outra diferença de grande importância entre while-do e repeat-until é que com while-do a condição é verificada no início do ciclo,e no cilclo repeat-until é verificada no fim. Posto isto, as intruções no ciclo repeat-until são executadas pelo menos uma vez.
Repare nos programas mostrados em seguida (também está incluído  um exemplo com um ciclo for ). Apenas o código com a estrutura repeat-until tem saída.
 
código do programa

x := 100;
repeat
  writeln('Ajax');
  x := x + 1;
until (x>10);
código do programa

x := 100;
while (x<=10) do
  begin
    writeln('Ajax');
    x := x + 1;
  end;
código do programa

for x := 100 to 10 do
  begin
    writeln('Ajax');
  end;
saída

Ajax
saída

saída

Note também as condições. A condição para repeat-until (x>0) é o oposto da condição para while-do (x<=10).

Aninhamento II

Agora que conhecemos todo os tipo de ciclos, vamos dar uma vista de olhos nas regras-de-bom-comportamento relacionadas com aninhamento. Exemplos de mau código

for i := 1 to 10 do
  for  k := 1 to 10 do
    begin
      for k := 1 to 10 do 
         writeln('Hello');
    end;
for  k := 1 to 10 do
  begin
    i := k;
    repeat
      j := i-1;
      while (j<10) do
        begin
  end; {end of for}
  i := i + 1;
    until i>20;  {end of repeat-until}
          j := j + 1;
        end; {end of while-do}

Boa identação do seu programa  irá
prevenir erros deste tipo.


Sumário

Três regras para ciclos:

Quick test:

Para testar o seu conhecimento, sobre o que aprendeu nesta aula, clique aqui  para um teste on-line.

Peter Stallinga. Universidade do Algarve, 15 março 2002