Looping – While e Expressões Aritméticas – Abap

Publicado: 15 de fevereiro de 2014 em Abap

A declaração WHILE executa continuamente um bloco de instruções enquanto uma determinada condição é verdadeira.

Sintaxe:

WHILE condição.
[bloco de instruções.]
ENDWHILE.

Operadores Aritméticos

  • (+) – adição.
  • (-) – subtração.
  • (*) – multiplicação.
  • (/) – divisão.
  • DIV – divisão inteira.
  • MOD – Resto da divisão inteira.
  • ** – Potenciação.

Ao usar expressões matemáticas, os operadores +, -, *, **, e /, bem como abertura e fechamento de parênteses, são interpretados como palavras ABAP e devem ser precedidos e seguidos por espaços em branco.

Em operações de divisão, o divisor não pode ser zero se o dividendo não é zero. Com a divisão inteira, você usa os operadores DIV ou MOD em vez de /. DIV calcula o quociente inteiro, MOD calcula o resto da divisão.

Exemplo:

Neste exemplo criamos dois loopings para calcular os números primos em uma faixa de 1 à 1000. Vale  deixar como nota que a linguagem ABAP possui uma sintaxe estilo velha guarda, as linguagens mais modernas reformularam a sintaxe do comando While para que não gere erros de logica.

Podemos ver isto no exemplo abaixo, em ABAP inicializamos o valor do looping e alimentamos o contador fora do comando while, o que não acontece em linguagens como Java, C# e  o moderno C++. Em nosso exemplo a inicialização do looping é essencial para o resultado do calculo e pode ser facilmente esquecida ou não prevista, criando um resultado indesejado, já o contador se não for incrementado  irá entrar em um laço infinito impedindo a continuidade do programa, para entender melhor você pode ver o mesmo exemplo de laço com a sintaxe moderna clicando aqui:

ABAP

*&---------------------------------------------------------------------*
*& Report  ZPRIMOS
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Primos
*&---------------------------------------------------------------------*

REPORT  ZPRIMOS.

DATA : numeros TYPE i,
       primos  TYPE i.

numeros = 1.
*// Inicie a variável primos aqui e obterá um erro logico.

WHILE numeros LE 1000.

   primos  = 2. " // Old Style, tente inicializar a variável fora do looping.
   WHILE primos LE ( numeros - 1 ).

       IF ( ( numeros MOD primos ) EQ 0 ).
         EXIT.
       ENDIF.

   primos = primos + 1. " // Old Style, sem está instrução obterá um laço infinito.
   ENDWHILE.

   IF primos EQ numeros.
     WRITE : numeros, ','.
   ENDIF.

 numeros = numeros + 1. " //Old Style, sem está instrução obterá um laço infinito.
 ENDWHILE.
Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s