Instrucciones condicionales se usan para cambiar el flujo de ejecución dependiendo de ciertas condiciones que se especifican por el programador. Instrucciones condicionales, SIempre se evalúan como true o false. Las condiciones se utilizan en SI, evaluar y realizar declaraciones. Los distintos tipos de condiciones de la Siguiente manera:
SI comprueba la existencia de condiciones. SI una condición es verdadera SI se ejecuta el bloque; y si la condición es falsa, el otro se ejecuta el bloque.
FIN-SI es utilizado para finalizar el bloque SI. Al final del bloque SI, un período puede ser utilizado en lugar de a FIN-SI. Pero es siempre preferible utilizar END-IF para el múltiplo SI los bloques.
Nested-SI: SI los bloques que aparecen dentro de otro bloque SI. No hay límite a la profundidad de instrucciones SI anidadas.
Continuación 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
Relación estado compara dos operandos, ya que puede ser un identificador, literal, o expreSIones aritméticas. Comparación algebraica de campos numéricos se realiza independientemente de su tamaño y uso cláusula.
Para los no-operandos numéricos
Si dos operandos numéricos de igual tamaño se comparan a continuación, los caracteres se comparan de izquierda con las posiciones correspondientes hasta el final. El operando que contiene mayor número de caracteres es declarado mayor.
Si dos operandos numéricos de tamaño desigual se comparan, el menor elemento de datos se anexa con espacios al final hasta el tamaño de los operandos es igual y, a continuación, en comparación con arreglo a las normas señaladas en el punto anterior.
A continuación se muestra la Sintaxis Siguiente de Relación con instrucciones de condición:
[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 se utiliza para verificar el Signo de un operando numérico. Determina si un determinado valor numérico es mayor que, menor que o igual a cero.
Continuación 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
Clase se utiliza para comprobar si un operando sólo contiene datos alfabéticos o numéricos. Los espacios se conSIderan en ORDEN ALFABÉTICO, ORDEN ALFABÉTICO-INFERIOR, y ALFABÉTICOS de LA PARTE SUPERIOR.
Continuación 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
El nombre de la condición 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 están definidas con número de nivel 88. No tendrá un PIC cláusula.
Continuación se presenta la Sintaxis de condición 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
Condición negada se efectuará mediante la palabra clave NO. Si una condición es verdadera y no hemos dado en la parte delantera del mismo, su valor final será false.
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
Un estado contiene dos o más condiciones conectado mediante los operadores lógicos AND o OR.
Siguiente es la Sintaxis de instrucciones de condición:
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 es un reemplazo de la serie de IF-ELSE. Se puede utilizar para evaluar más de una condición. Es Similar a instrucción 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