User Tools

Site Tools


repeticao_por_enumeracao_for-do

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:

  • o valor de \texttt{<EAO\_2>} é avaliado;
  • a variável de controle recebe o valor da avaliação de <EAO_1>;
  • caso tenha sido usada a forma com to, então o valor da variável de controle é comparado com <EAO_2> e, se for menor ou igual, o comando é executado e a variável de controle é incrementada de uma unidade;
  • caso tenha sido usada a forma com downto, então o valor da variável de controle é comparado com <EAO_2> e se for maior ou igual, o comando é Executado e a variável de controle é decrementada de uma unidade;
  • o ciclo se repete até que o valor da variável de controle ultrapasse o limite estabelecido em <EAO_2>, no caso da forma com to ou se torne inferior a <EAO_2> no caso da forma com downto.

É 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.

repeticao_por_enumeracao_for-do.txt · Last modified: 2019/04/24 11:46 by castilho