Aula 10: Ciclos I: For

translated by Peter Stallinga

Ciclo For

O ciclo mais usado em PASCAL é o ciclo For. Dentro do ciclo vão ser executadas a(s) Instrução(ões) um número de vezes predeterminado, numa maneira contável. A contrastar temos os ciclos que correm enquanto uma certa condição é verdade, tal como nos vamos ver nas aulas seguintas. A estrutura geral do ciclo For é:
For variable := start_value To end_value Do 
     instruction;

A instrução instruction vai ser repetada um certo número de vezes, determinado pelos parámetros de controlo start_value e end_value.
Porque o ciclo faz coisas numa maneira contável, os parámetros de controlo variable, start_value e end_value devem ser de um tipo inteiro. Também não esquecer de declarar a variável (veja aula 5) Exemplo:
 

código PASCAL


PROGRAM ForLoopExample; 

Var i: integer;

begin
  For i := 1 To 4 Do 
    WriteLn('Ola');
end.

 output 

  Ola
  Ola
  Ola
  Ola

Este programa faz o seguinte 
  1) atribui 1 a i
  2) verifica se i é maior que 4
  3) se for verdade: SAI do CICLO, senão
  4) executa WriteLn('Ola');
  5) adiciona 1 a i
  6) volta para o passo 2)


Instruções multiplas


Tal como na estrutura if ... then ... else podemos juntar instruções com begin e end nos ciclos:
 
código PASCAL

For i := 1 To 4 Do
  begin
    WriteLn('Ola');
    WriteLn('Eu chamo-me Peter');
  end;

    output

Ola
Eu chamo-me Peter
Ola
Eu chamo-me Peter
Ola
Eu chamo-me Peter
Ola
Eu chamo-me Peter 


Usar a variável de controlo

Entre o ciclo podemos usar a variável de controlo, mas não faz porcarias
 
Bom código:

código PASCAL

For i := 1 To 4 Do 
  WriteLn(i, ' Ola');

    output 

  1 Ola 
  2 Ola
  3 Ola
  4 Ola


Mau código: (altera variável no ciclo for)

 código PASCAL

For i := 1 To 4 Do
  begin
    WriteLn(i, ' Ola');
    i := i + 1;
  end;

    output 

  1 Ola
  3 Ola
 


O programa no lado direito é um exemplo de mau código. Este estilo de programar, embora poupe espaço e tempo a correr (às vezes), torna o seu programa mal estruturado, ilegível e impossível de perceber para os seus colegas! Se pretende  realizar o output de lado direito, use os ciclos do tipo while ou repeat-until, ou, melhor, usa a estrutura abaixa
program code

For i := 1 To 2 Do
  WriteLn(2*i-1, ' Ola');
   output

 1 Ola
 3 Ola

Expressões


Os parámetros start_value e end_value podem também ser variáveis ou expressões das quais resultam valores do tipo inteiro, por exemplo:
           código PASCAL

PROGRAM ForLoopExample; 

Var i: integer;
    j: integer;

begin
  j := 5;
  For i := j To 2*4+1 Do 
    WriteLn(i, 'Ola');
end.


   output
5 Ola
6 Ola
7 Ola
8 Ola
9 Ola


Ciclos dentro de outros ciclos


Os ciclos For (e também os outros ciclos que vamos conhecer) podem ser 'nested' ou seja ciclos dentro de outros ciclos. É possível criar ciclos duplos, ou ciclos triplos (tal como é mostrado nas figuras abaixo) ou com outros níveis. Estas estruturas parecem ninhos dos pássaros. Por isso colocar ciclos dentro de ciclos chama-se 'nesting' ('nest' é ninho em inglês). Aqui vêm alguns exemplos


 
          código PASCAL
--------------------------------------
PROGRAM NestedLoop3; 

Var i, j, k: integer;

begin
  For i := 1 To 2 Do
    For j := 1 To 2 Do
      For k := 1 To 2 Do
        WriteLn('i=',i,' j=', j,
          ' k=',k);
end.
 

   output
-------------
i=1 j=1 k=1
i=1 j=1 k=2
i=1 j=2 k=1
i=1 j=2 k=2
i=2 j=1 k=1
i=2 j=1 k=2
i=2 j=2 k=1
i=2 j=2 k=2
 código PASCAL
------------------------------------------
PROGRAM NestedLoop3; 

Var i, j, k: integer;

begin
  For i := 1 To 2 Do
    For j := 1 To 2 Do
      begin
        For k := 1 To 2 Do
          WriteLn('i=',i,' j=', j,
             ' k=',k);
        For k := 1 To 2 Do
          WriteLn('i=',i,' j=', j,
             ' k=',k);
      end;
end.
 

    output
-------------
i=1 j=1 k=1
i=1 j=1 k=2
i=1 j=1 k=1
i=1 j=1 k=2
i=1 j=2 k=1
i=1 j=2 k=2
i=1 j=2 k=1
i=1 j=2 k=2
i=2 j=1 k=1
i=2 j=1 k=2
i=2 j=1 k=1
i=2 j=1 k=2
i=2 j=2 k=1
i=2 j=2 k=2 
i=2 j=2 k=1
i=2 j=2 k=2 


Ciclos com 'DownTo'

Em vez de um ciclo com uma variável aumentanda, podemos escrever um ciclo onde a variável sempre desce. Fazemos isto atravês a substituição da palavre 'To' pela palavre 'DownTo'. Por examplo:
 
código PASCAL
For i := 4 DownTo 1 Do 
  WriteLn(i, ' Ola'); 
    output

  4 Ola 
  3 Ola
  2 Ola
  1 Ola

Este programa faz o seguinte 
1) atribui 4 a i
2) verifica se ié menor que 1
3) se for verdade: SAI do CICLO, 
     senão
4) executa WriteLn('Ola');
5) subtrai 1 de i
6) volta para o passo 2)


Mini teste:

Para testar o seu conhecimento sobre o que aprendeu nesta lição, click aqui para um teste on-line. Nota que esta não é a forma do teste final.

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