O for-do é o comando de repetição por enumeração do Pascal. Usa-se para repetir um bloco de comandos por um número fixo e predeterminado de vezes. O controle é feito por uma variável, denominada variável de controle, a qual respeita os limites estabelecidos que dependem de um valor inicial e de um valor final. Tais limites são definidos antes do comando ser executado e não podem ser alterados.
Sintaxe:
for <variavel_de_controle> := <EAO_1> to <EAO_2> do <comando>; for <variavel_de_controle> := <EAO_1> downto <EAO_2> do <comando>;
As palavras for, do, to e downto são reservadas. O comando a ser executado é único, devendo ser utilizados os delimitadores de bloco (ver seção Delimitadores de bloco) no caso de haver mais de um.
Como em Pascal todo comando termina por ponto-e-vírgula e, neste caso, o comando for-do termina somente após <comando>, então o ponto-e-vírgula somente aparece no final, e não no meio da construção.
O comportamento do for-do é o seguinte:
É imperativo dizer que <variavel_de_controle> deve ser de tipo ordinal e que <EAO_1> e <EAO_2> são expressões aritméticas cujos valores de retorno também são de um tipo ordinal. Estas duas expressões são avaliadas antes que o comando seja executado, sendo que é proibido que se modifique o valor da variável de controle pelo comando. Finalmente, não adianta alterar variáveis que mudem o valor de <EAO_2>, uma vez que esta expressão foi avaliada antes do início do laço.
Exemplo:
program exemplo_for_do_1; var i, n: integer; begin writeln('Informe um numero inteiro positivo: '); read(n); for i:= 1 to n do writeln(i); writeln ('Fim.'); end.
O programa imprime de maneira crescente todos os números entre 1 e n. Se o número lido for negativo ou nulo então a mensagem “Fim.” é impressa imediatamente, isto é, nenhum número aparece na tela.
Exemplo:
program exemplo_for_do_2; var i, n: integer; begin writeln('Informe um numero inteiro positivo: '); read(n); for i:= n downto 1 do writeln(n); writeln('Fim.'); end.
O programa anterior imprime de maneira decrescente todos os números entre n e 1. Se o número lido for negativo ou nulo então a mensagem “Fim.” é impressa imediatamente, isto é, nenhum número aparece na tela. Este programa é absolutamente equivalente ao primeiro exemplo apresentado na seção Repetição condicional com teste no início (while-do).
Exemplo:
program tabuada_1_ao_10; const MAX = 10; var i, j : integer; begin for i:= 1 to MAX do begin writeln('Tabuada do ', i); for j := MAX downto 1 do writeln(i, ' x ', j, ' = ', i * j); writeln; end; end.
Este último exemplo mostrou como comandos do tipo for-do podem ser alinhados para se obter a impressão de todas as tabuadas do 1 ao 10.
Não é possível definir um laço de execução infinita usando-se o comando for-do.