COBOL - Instrucciones de Condicin



Instrucciones condicionales se usan para cambiar el flujo de ejecucin dependiendo de ciertas condiciones que se especifican por el programador. Instrucciones condicionales, SIempre se evalan como true o false. Las condiciones se utilizan en SI, evaluar y realizar declaraciones. Los distintos tipos de condiciones de la Siguiente manera:

  • IF Condicin Declaracin
  • Relacin con estado
  • Signo Estado
  • Condicin de Clase
  • Condicin Condition-Name
  • Condicin Negada
  • Estado combinado

IF Condicin Declaracin

SI comprueba la existencia de condiciones. SI una condicin es verdadera SI se ejecuta el bloque; y si la condicin es falsa, el otro se ejecuta el bloque.

FIN-SI es utilizado para finalizar el bloque SI. Al final del bloque SI, un perodo puede ser utilizado en lugar de a FIN-SI. Pero es siempre preferible utilizar END-IF para el mltiplo SI los bloques.

Nested-SI: SI los bloques que aparecen dentro de otro bloque SI. No hay lmite a la profundidad de instrucciones SI anidadas.

Sintaxis

Continuacin se presenta la Sintaxis de las declaraciones de estado:

IF [condition] THEN
   [COBOL statements]
ELSE
   [COBOL statements]
END-IF.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).
   01 WS-NUM3 PIC 9(5).
   01 WS-NUM4 PIC 9(6).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1 WS-NUM3.
   MOVE 15 TO WS-NUM2 WS-NUM4.
   
   IF WS-NUM1 > WS-NUM2 THEN
      DISPLAY 'IN LOOP 1 - IF BLOCK'
      
      IF WS-NUM3 = WS-NUM4 THEN
         DISPLAY 'IN LOOP 2 - IF BLOCK'
      ELSE
         DISPLAY 'IN LOOP 2 - ELSE BLOCK'
      END-IF
      
   ELSE
      DISPLAY 'IN LOOP 1 - ELSE BLOCK'
   END-IF.
   
STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK

Relacin con estado

Relacin estado compara dos operandos, ya que puede ser un identificador, literal, o expreSIones aritmticas. Comparacin algebraica de campos numricos se realiza independientemente de su tamao y uso clusula.

Para los no-operandos numricos

Si dos operandos numricos de igual tamao se comparan a continuacin, los caracteres se comparan de izquierda con las posiciones correspondientes hasta el final. El operando que contiene mayor nmero de caracteres es declarado mayor.

Si dos operandos numricos de tamao desigual se comparan, el menor elemento de datos se anexa con espacios al final hasta el tamao de los operandos es igual y, a continuacin, en comparacin con arreglo a las normas sealadas en el punto anterior.

Sintaxis

A continuacin se muestra la Sintaxis Siguiente de Relacin con instrucciones de condicin:

[Data Name/Arithmetic Operation]

          [IS] [NOT] 

[Equal to (=),Greater than (>), Less than (<), 
 Greater than or Equal (>=), Less than or equal (<=) ]

[Data Name/Arithmetic Operation] 

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1.
   MOVE 15 TO WS-NUM2.
   
   IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
      DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
   ELSE
      DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
   END-IF.
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa que produce el resultado Siguiente:

WS-NUM1 IS GREATER THAN WS-NUM2

Signo Estado

Signo estado se utiliza para verificar el Signo de un operando numrico. Determina si un determinado valor numrico es mayor que, menor que o igual a cero.

Sintaxis

Continuacin se presenta la Sintaxis de Firmar sentencias de condiciones:

[Data Name/Arithmetic Operation] 

          [IS] [NOT] 

[Positive, Negative or Zero]

[Data Name/Arithmetic Operation]

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC S9(9) VALUE -1234.
   01 WS-NUM2 PIC S9(9) VALUE 123456.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   IF WS-NUM1 IS POSITIVE THEN
      DISPLAY 'WS-NUM1 IS POSITIVE'.
      
   IF WS-NUM1 IS NEGATIVE THEN
      DISPLAY 'WS-NUM1 IS NEGATIVE'.
      
   IF WS-NUM1 IS ZERO THEN
      DISPLAY 'WS-NUM1 IS ZERO'.
      
   IF WS-NUM2 IS POSITIVE THEN
      DISPLAY 'WS-NUM2 IS POSITIVE'.

STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa que produce el resultado Siguiente:

WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE

Condicin de Clase

Clase se utiliza para comprobar si un operando slo contiene datos alfabticos o numricos. Los espacios se conSIderan en ORDEN ALFABTICO, ORDEN ALFABTICO-INFERIOR, y ALFABTICOS de LA PARTE SUPERIOR.

Sintaxis

Continuacin se presenta la Sintaxis de clase:

[Data Name/Arithmetic Operation>]

          [IS] [NOT] 

[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]

[Data Name/Arithmetic Operation]

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
   01 WS-NUM2 PIC 9(9) VALUE 123456789.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS ALPHABETIC THEN
      DISPLAY 'WS-NUM1 IS ALPHABETIC'.
      
   IF WS-NUM1 IS NUMERIC THEN
      DISPLAY 'WS-NUM1 IS NUMERIC'.
      
   IF WS-NUM2 IS NUMERIC THEN
      DISPLAY 'WS-NUM1 IS NUMERIC'.
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

WS-NUM1 IS ALPHABETIC
WS-NUM1 IS NUMERIC

Estado de condicin de nombre

El nombre de la condicin es un nombre definido por el usuario. Contiene un conjunto de valores especificados por el usuario. Que se comporta como las variables de tipo Boolean. stas estn definidas con nmero de nivel 88. No tendr un PIC clusula.

Sintaxis

Continuacin se presenta la Sintaxis de condicin definida por el usuario:

88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM PIC 9(3).
   88 PASS VALUES ARE 041 THRU 100.
   88 FAIL VALUES ARE 000 THRU 40.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 65 TO WS-NUM.
   
   IF PASS 
      DISPLAY 'Passed with ' WS-NUM ' marks'.
      
   IF FAIL 
      DISPLAY 'FAILED with ' WS-NUM 'marks'.
      
STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

Passed with 065 marks

Condicin Negada

Condicin negada se efectuar mediante la palabra clave NO. Si una condicin es verdadera y no hemos dado en la parte delantera del mismo, su valor final ser false.

Sintaxis

Siguiente es la Sintaxis para anular sentencias de condiciones:

IF NOT [CONDITION] 
   COBOL Statements
END-IF.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(9) VALUE 25.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
      DISPLAY 'IF-BLOCK'
   ELSE
      DISPLAY 'ELSE-BLOCK'
   END-IF.
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

ELSE-BLOCK

Estado combinado

Un estado contiene dos o ms condiciones conectado mediante los operadores lgicos AND o OR.

Sintaxis

Siguiente es la Sintaxis de instrucciones de condicin:

IF [CONDITION] AND [CONDITION]
   COBOL Statements
END-IF.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(2) VALUE 25.
   01 WS-NUM3 PIC 9(2) VALUE 20.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
      DISPLAY 'Both condition OK'
   ELSE
      DISPLAY 'Error'
   END-IF.
   
STOP RUN.

JCL para ejecutar el programa COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

Both condition OK

Evaluar Verbo

Evaluar verbo es un reemplazo de la serie de IF-ELSE. Se puede utilizar para evaluar ms de una condicin. Es Similar a instruccin SWITCH en programas C.

Ejemplo

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 0.
   
PROCEDURE DIVISION.
   MOVE 3 TO WS-A.
   
   EVALUATE TRUE
      WHEN WS-A > 2
         DISPLAY 'WS-A GREATER THAN 2'

      WHEN WS-A < 0
         DISPLAY 'WS-A LESS THAN 0'

      WHEN OTHER
         DISPLAY 'INVALID VALUE OF WS-A'
   END-EVALUATE.
   
STOP RUN.

JCL para ejecutar el programa COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Cuando se compila y ejecuta el programa antes mencionado, se produce el resultado Siguiente:

WS-A GREATER THAN 2
Advertisements