Mientras escribe un programa, un programador necesita verificar varias condiciones, si la condición es verdadera, entonces se ejecuta un bloque particular de declaraciones, o bien se ejecuta otro bloque de declaraciones. Para comprobar estas condiciones utilizamos declaraciones condicionales . Estas declaraciones devuelven verdadero o falso. Hay varios tipos de sentencias condicionales en Cobol:
- Condición relacional.
- Estado de la firma.
- condición de clase.
- Condición de nombre de condición.
- Condición negada.
- Condición compuesta.
- Si condición.
- Condición if-else.
- Condición If anidada.
Condición relacional:
Si el programador quiere hacer una comparación relacional entre operando/s o literal/es, entonces usamos operadores relacionales, es decir, < , > , < = , >= , ==. Podemos usar el símbolo relacional particular o podemos deletrearlo en palabras.
Por ejemplo :
- (a > b ) también se puede escribir como (a MAYOR QUE b).
- (a !< b) también se puede escribir como (a NO ES MENOR QUE b).
- (a == b) también se puede escribir como (a ES IGUAL A b).
Sintaxis:
Operand-1 [IS][NOT] relational-operator Operand-2.
Ejemplo:
Cobol
IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. 77 OPERAND2 PIC 99. 77 OPERAND3 PIC 99. 77 OPERAND4 PIC 99. PROCEDURE DIVISION. MOVE 8 TO OPERAND1. MOVE 5 TO OPERAND2. MOVE 4 TO OPERAND3. MOVE 4 TO OPERAND4. IF (OPERAND1 > OPERAND2) DISPLAY "OPERAND1 IS GREATER THAN OPERAND2" ELSE DISPLAY "OPERAND2 IS GREATER THAN OPERAND2". IF (OPERAND3 IS EQUAL TO OPERAND4) DISPLAY "OPERAND3 AND OPERAND4 ARE EQUAL" ELSE DISPLAY "OPERAND3 AND OPERAND4 ARE NOT EQUAL". STOP RUN.
Producción:
OPERAND1 IS GREATER THAN OPERAND2 OPERAND3 AND OPERAND4 ARE EQUAL
Estado de la señal:
La condición de signo determina si un operando particular o una expresión aritmética es Positivo, Negativo o Cero. En la condición Signo, se determina que la condición Positiva es verdadera solo cuando el valor del operando es estrictamente verdadero, es decir, el valor Cero no se trata positivamente en este caso.
Sintaxis:
Operand1/Arithmetic expression IS [NOT] POSITIVE/NEGATIVE/ZERO
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORLD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. 77 OPERAND2 PIC 99. PROCEDURE DIVISION. MOVE 8 TO OPERAND1. MOVE 5 TO OPERAND2. IF (OPERAND1 IS POSITIVE) DISPLAY "OPERAND1 IS POSITIVE". IF (OPERAND2 IS NOT ZERO) DISPLAY "OPERAND2 IS NOT ZER0". STOP RUN.
Producción:
OPERAND1 IS POSITIVE OPERAND2 IS NOT ZERO
Condición de clase:
Si el programador quiere verificar si un valor ingresado es alfabético o numérico, entonces usamos Condiciones de clase. Ayuda a comprobar si el valor introducido es válido o no. La condición numérica es verdadera solo cuando el valor ingresado contiene dígitos del 0 al 9 (independientemente del signo) o es alfanumérico. De manera similar, la condición alfabética es verdadera solo cuando el valor ingresado contiene letras de la A a la Z o es alfanumérico.
Sintaxis:
Operand IS [NOT] NUMERIC/ALPHABETIC
Ejemplo:
Cobol
IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND PIC X9. PROCEDURE DIVISION. DISPLAY "ENTER ANY ALPHABET/NUMBER". ACCEPT OPERAND. IF (OPERAND IS ALPHABETIC) DISPLAY "ALPHABET" ELSE DISPLAY "NUMBER". STOP RUN.
Producción:
ENTER ANY ALPHABET/NUMBER C ALPHABET
Condición de nombre de condición:
Condition-name es una condición en sí misma y contiene valores verdaderos o falsos . El nombre de la condición siempre debe declararse dentro de un nombre de datos llamado Variable condicional , es decir, no se puede definir de forma independiente. El nombre de la condición se vuelve verdadero solo si la variable condicional asume cualquiera de los valores asignados. El LEVEL 88 se usa para declarar condition-name.
Por ejemplo;
77 EXPERIENCE PIC 9. 88 BEGINNER VALUE IS 1. 88 INTERMEDIATE VALUE IS 3. 88 PROFESSIONAL VALUES ARE 5,6,7.
Explicación: En el ejemplo anterior, «EXPERIENCIA» es una variable condicional con nivel 77, mientras que «PRINCIPIO», «INTERMEDIO», «PROFESIONAL» son nombre de condición con nivel 88. Ahora la condición PRINCIPIANTE será verdadera solo cuando el valor de EXPERIENCIA es 1 y de manera similar, la condición INTERMEDIA será verdadera solo cuando el valor de EXPERIENCIA sea 3, y la condición PROFESIONAL será verdadera solo cuando el valor de EXPERIENCIA sea 5 o 6 o 7.
Sintaxis:
77 Conditional Variable PIC 9/A/X. 88 Condition-name1 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]] 88 Condition-name2 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]]
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 WEXP PIC 99. 88 PROFESSIONAL VALUE 10. 88 HIGH VALUE 9. 88 INTERMEDIATE VALUES ARE 6,7,8. 88 BEGINNER VALUES ARE 1 THRU 5. 88 UNEXP VALUE IS 0. PROCEDURE DIVISION. DISPLAY "ENTER EXPERIENCE". ACCEPT WEXP. IF PROFESSIONAL DISPLAY "PROFESSIONAL". IF HIGH DISPLAY "HIGHLY EXPERIENCED". IF INTERMEDIATE DISPLAY "INTERMEDIATE LEVEL". IF BEGINNER DISPLAY "BEGINNER". IF UNEXP DISPLAY "UNEXPERIENCED". STOP RUN.
Producción:
ENTER EXPERIENCE 7 INTERMEDIATE LEVEL
Condición negada:
Cualquier condición que tenga un operador NOT precedido se conoce como condición negada. Esta condición siempre produce lo contrario de la condición, es decir, si la condición es verdadera , la salida final será falsa y viceversa. El operador NOT se puede utilizar de dos formas:
- Como parte de la condición, como hemos visto en las condiciones anteriores.
- Simplemente puede preceder a cualquier condición y convertirla en una Condición Negada.
Sintaxis:
NOT Condition
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. 77 OPERAND2 PIC 99. PROCEDURE DIVISION. MOVE 10 TO OPERAND1. MOVE 8 TO OPERAND2. IF NOT OPERAND1 > OPERAND2 DISPLAY "TRUE CONDITION REVERSED" ELSE DISPLAY "FALSE CONDITION REVERSED". STOP RUN.
Producción:
FALSE CONDITION REVERSED
Condición compuesta:
Cuando el programador tiene que verificar dos o más condiciones como una sola condición, usamos operadores lógicos, Y u O, dos combinan las condiciones. En el caso de AND, la condición compuesta devuelve un valor verdadero solo si todas las condiciones constituyentes son verdaderas ; de lo contrario, devuelve falso . En el caso de OR, la condición compuesta devuelve el valor verdadero si alguna de las condiciones constituyentes es verdadera , de lo contrario, devuelve falso .
Sintaxis:
Condition1 AND/OR Condition2 [AND/OR Condition3....];
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 9. 77 OPERAND2 PIC 9. PROCEDURE DIVISION. MOVE 7 TO OPERAND1. MOVE 0 TO OPERAND2. IF OPERAND1 IS POSITIVE AND OPERAND2 IS POSITIVE DISPLAY "BOTH OPERANDS ARE POSITIVE" ELSE DISPLAY "BOTH OPERANDS ARE NOT POSITIVE". STOP RUN.
Producción:
BOTH OPERANDS ARE NOT POSITIVE
Si condición:
Si la declaración condicional verifica las condiciones, si una condición particular devuelve un valor verdadero solo entonces se ejecuta un conjunto particular de declaraciones. Estas sentencias pueden ser sentencias simples o sentencias compuestas. Si la condición devuelve un valor falso , el control no entra en el bloque IF . En este caso, recuerde siempre que PERIOD(.) solo se utilizará al final de la última declaración, para terminar el bloque IF.
Sintaxis:
IF (Condition/s) Set of statements [END IF]
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. 77 OPERAND2 PIC 99. PROCEDURE DIVISION. MOVE 10 TO OPERAND1. MOVE 8 TO OPERAND2. IF OPERAND1 > OPERAND2 DISPLAY "OPERAND1 IS GREATER". STOP RUN.
Producción:
OPERAND1 IS GREATER
Condición if-else:
La declaración condicional If-else verifica la(s) condición(es), si la condición es verdadera, entonces ejecuta las declaraciones del bloque IF, si la condición es falsa, entonces ejecuta la declaración del bloque ELSE. En este caso, recuerde siempre que PERIOD(.) solo se utilizará al final de la última declaración, para terminar el bloque IF-ELSE.
Sintaxis:
IF (Condition/s) Set of Statements ELSE Set of statements [END IF].
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. 77 OPERAND2 PIC 99. PROCEDURE DIVISION. MOVE 3 TO OPERAND1. MOVE 8 TO OPERAND2. IF OPERAND1 > OPERAND2 DISPLAY "OPERAND1 IS GREATER" ELSE DISPLAY "OPERAND2 IS GREATER". STOP RUN.
Producción:
OPERAND2 IS GREATER
La siguiente sintaxis también se usa para las declaraciones de condición condicional anidadas en COBOL:
Sintaxis:
IF (Condition1) IF (Condition2) Set of statement/s ELSE Set of statement/s END-IF ELSE Set of statement/s END-IF.
Ejemplo:
Cobol
IDENTIFICATION DIVISION. PROGRAM-ID. HELLOWORD. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 OPERAND1 PIC 99. PROCEDURE DIVISION. MOVE 12 TO OPERAND1. IF OPERAND1 IS NUMERIC DISPLAY "OPERAND IS NUMERIC" IF OPERAND1 IS POSITIVE DISPLAY " OPERAND IS POSITIVE" ELSE IF OPERAND1 IS NEGATIVE DISPLAY "OPERAND IS NEGATIVE" ELSE DISPLAY "OPERAND IS ZERO" END-IF END-IF ELSE DISPLAY "OPERAND IS NOT NUMERIC" END-IF. STOP RUN.
Producción:
OPERAND IS NUMERIC OPERAND IS POSITIVE