Repetindo operações:

Nem só de comparações vive um programa. Usamos com frequência uma estrutura que nos permite executar operações repetidas. A sua forma é

   for... do...

Ou seja for (para alguma operação específica) do (faça o que se segue). Isso é o que chamamos de looping de programação (ela fica "girando" dentro daquele trecho até que sejam cumpridas todas as exigências) Digamos que seja necessário acrescentar espaços (uns 10), no final de uma string. Msg é a string e Tm uma variável numérica (obrigatoriamente local) usada para controle do looping. A programação seria:

   for Tm:= 1 to 10 do Msg:= Msg + ' ';

Note que esta linha de programação será executada 10 vezes e Msg terá, no final, 10 espaços. A variável Tm é automaticamente acrescida de 1 em cada "volta" do looping. Aqui também podemos transformar a operação em um bloco (begin... end;) de instruções.

   for Tm:= 1 to 10 do begin
     Msg:= Msg + ' ';
     Valor:= Valor + 4;
   end;

Uma alternativa ao for... do... é a estrutura while... do..., ou seja, while (enquanto alguma coisa for verdadeira) do (faça o que se segue). Neste caso, a variável que controla o o looping não é automática e pode ser usado qualquer tipo, inclusive a que estiver sendo manipulada. Veja o exemplo:

   while length(Msg) < 10 do Msg:= Msg + ' ';

Ou seja, enquanto o tamanho (length) da string Msg for menor do que 10 caracteres, será acrescentado um espaço no final dela.

Existe uma terceira estrutura de repetição, que já embute um bloco e cuja condição de execução é verificada no final da operação, garantindo que pelo menos uma vez o bloco será executado. É ela:

   repeat... until...

Ou seja, repeat (repita as operações a seguir) until (até que a condição seja satisfeita). Vamos montar a mesma estrutura que acrescenta espaços no final da variável Msg:

   repeat
     Msg:= Msg + ' ';
   until length(Msg) = 10;

Os laços podem ser interrompidos (quebrados) mesmo que as condições não tenham sido ainda plenamente satisfeitas. Por exemplo: digamos que será feita uma contagem de 1 a 10, porém ela deve ser interrompida quando atingir o valor 5:

   for Tm:= 1 to 10 do begin
     if Tm = 5 then break;
   end;


online