lunes, 10 de octubre de 2011

Ciclos (Loops)

Ciclos incondicionales:

DO [n TIMES] ...
[Statement_block]
[statement_block]
ENDDO.
ENDDO.

Además de utilizar el TIMES para restringir el número de pasadas de bucle de n.Utilizar  TIMES para restringir a n el numero de veces que pasa por el ciclo.  Las sentencias EXIT y STOP finalizan el ciclo. El campo del sistema sy-index contiene el numero de ciclos por donde ha pasado.

Ejemplo 1:

DO.
  WRITE sy-index.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
         EXIT.
   ENDIF.
ENDDO.ENDDO.

La salida es: 1 2 3.

Ejemplo 2:
DO 2 TIMES.
ESCRIBE SY-índice.
   WRITE sy-index.
SKIP.
   SKIP.
   DO 3 TIMES.
      WRITE sy-index.
ENDDO.
   ENDDO.
SKIP.    SKIP.
 ENDDO.

ENDDO.ENDDO.La salida esLa salida de la lista es la siguiente::
1
1 2 3

2

1 2 3



Ciclos condicionales:

Se repite el ciclo hasta que una condicion sea verdadera.

WHILE log_exp
[Statemaent_block]
[statemaent_block]
ENDWHILE.
ENDWHILE.

Ejemplo:
REPORT demo_flow_control_while.
DATA: length TYPE i VALUE 0,
strl TYPE i VALUE 0,
string(30) TYPE c VALUE 'Test String'.
strl = strlen( string ).

WHILE string NE space.
       WRITE string(1).
       length = sy-index.
       SHIFT string.
ENDWHILE.

WRITE: / 'STRLEN: ', strl.
WRITE: / 'Length of string:', length.

La salida es : T es t S tr ing

STRLEN: 11

Length of String: 11


Terminar un paso de un ciclo incondicionalmente.

Para terminar un único paso de un ciclo utilizar CONTINUE, no ejecuta las sentencias restantes después del CONTINUE y salta al siguiente paso del ciclo.
DO 4 TIMES.
SI SY-índice = 2.
   IF sy-index = 2.
CONTINUE.
          CONTINUE.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.
ENDDO.

La salida es:

1 3 4


Terminar un paso de un ciclo condicionalmente.

Para terminar un paso de un ciclo utilizar CHECK, si la condición no es vardadera cualquier sentencia restante dentro del ciclo es ignorada y continua en el siguiente paso del ciclo.

DO 4 TIMES.
CONSULTAR sy-índice de entre 2 y 3.
   CHECK sy-index BETWEEN 2 and 3.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.

La salida es:
2 3

Salir de un ciclo

Para terminar un cliclo utilizar la sentencia EXIT.
DO 4 TIMES.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
          EXIT.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
ENDDO.  
WRITE sy-index.
ENDDO.ENDDO.
La salida es:
1 2




No hay comentarios:

Publicar un comentario