quarta-feira, 18 de dezembro de 2013

18.05.04.05 Instrução for-step

 

Exemplo

 

 

for evenNumber range 0 to 10 step 2 do

  write(evenNumber);

end for;

 

 

 

Semântica:

 

Quando o símbolo "to" é usado na instrução for, a definição é como se segue:

Primeiro o 'limite inferior' e o 'limite superior' que estão após "range" e "to" são avaliados.

O limite inferior é atribuído a 'variável de controle' localizada após "for"

O 'limite inferior' se encontra antes de "to".

Enquanto o valor da 'variável de controle' for inferior ou igual ao 'limite superior' as instruções são executadas.

Depois a 'variável de controle' é incrementada com o valor após "step" e comparada com o 'limite superior' novamente.

O ciclo comparar, executar e incrementar é repetido até que a 'variável de controle' seja maior que o 'limite superior'.

 

Quando o símbolo "downto" é usado na instrução for, a definição é como se segue:

Primeiro o 'limite inferior' e o 'limite superior' que estão após "range" e "downto" são avaliados.

Em seguida, a variável de controle após o "for" é atribuída com o valor do 'limite superior'.

Enquanto o valor da 'variável de controle' for superior ou igual ao 'limite inferior' as instruções são executadas.

Depois a 'variável de controle' é decrementada com o valor após "step" e comparada com o 'limite inferior' novamente.

O ciclo comparar, executar e decrementar é repetido até que a 'variável de controle' seja menor que o 'limite inferior.

 

Sintaxe:

 

 

for_step_statement ::=

'for' identifier 'range' expression [ 'to' | 'downto' ] expression 'step' expression 'do'

  statement

'end' 'for' .

 

 

 

Declaration:

 

 

$ syntax expr: .for.().range.().to.().step.().do.().end.for is     -> 25;

$ syntax expr: .for.().range.().downto.().step.().do.().end.for is -> 25;

 

const proc: FOR_STEP_DECLS (in type: aType) is func

  begin

    if getobj((inout aType param) +:= (in integer param)) <> NIL then

 

      const proc: for (inout aType: variable) range (in aType: lowerLimit) to (in aType: upperLimit)

          step (in integer: incr_step) do

          (in proc: statements) end for is func

        begin

          variable := lowerLimit;

          while variable <= upperLimit do

            statements;

            variable +:= incr_step;

          end while;

        end func;

 

    end if;

    if getobj((inout aType param) -:= (in integer param)) <> NIL then

 

      const proc: for (inout aType: variable) range (in aType: upperLimit) downto (in aType: lowerLimit)

          step (in integer: decr_step) do

          (in proc: statements) end for is func

        begin

          variable := upperLimit;

          while variable >= lowerLimit do

            statements;

            variable -:= decr_step;

          end while;

        end func;

 

    end if;

  end func;

 

FOR_STEP_DECLS(integer);

 

 

 

 

 

 

 

 

 

 

Nenhum comentário:

Postar um comentário