Instruções condicionais são usadas para alterar a execução fluxo dependendo de certas condições especificadas pelo programador. Instruções condicionais serão sempre avaliar para true ou false. As condições são utilizadas no CASO, avaliar e executar as declarações. Os diferentes tipos de condições são as seguintes:
Instrução IF verifica as condições. Se uma condição é verdadeira, a se o bloco é executado; e se a condição for falsa, o outro bloco é executado.
FINAL - SE é usado para terminar a SE bloquear. Ao final a se o bloco, um período podem ser usados em vez de FINAL-SE. Mas é sempre preferível a utilização FINAL-SE para vários SE bloqueia.
Nested-SE: SE os blocos aparecem dentro de outro se o bloco. Não há limite para a profundidade de "nested" se as declarações.
Sintaxe é a seguinte, se instruções de condição:
IF [condition] THEN [COBOL statements] ELSE [COBOL statements] END-IF.
Exemplo
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 executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
IN LOOP 1 - IF BLOCK IN LOOP 2 - ELSE BLOCK
Relação estado compara dois operandos, um dos quais pode ser um identificador, literal, ou expressão aritmética. Algebraic comparação de campos numéricos é feito independentemente do tamanho e do uso cláusula.
A não-numérico operandos
Se os dois não-numérica os operandos de igual tamanho são comparadas, em seguida, as personagens são comparados da esquerda com as posições correspondentes até o fim é alcançado. O operando com maior número de caracteres é declarada maior.
Se os dois não-numérico operandos de tamanho desigual são comparados, em seguida, o menor item de dados é anexado com espaços no final até o tamanho dos operandos torna-se igual e, em seguida, comparados de acordo com as regras mencionadas no ponto anterior.
Abaixo segue-se a sintaxe da relação estado declarações:
[Data Name/Arithmetic Operation] [IS] [NOT] [Equal to (=),Greater than (>), Less than (<), Greater than or Equal (>=), Less than or equal (<=) ] [Data Name/Arithmetic Operation]
Exemplo
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 executar o programa em COBOL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido que produz o seguinte resultado:
WS-NUM1 IS GREATER THAN WS-NUM2
Assinar condição é utilizado para verificar o sinal de um valor numérico operando. Ele determina se um determinado valor numérico é maior que, menor que ou igual a zero.
Sintaxe é a seguinte condição de assinar declarações:
[Data Name/Arithmetic Operation] [IS] [NOT] [Positive, Negative or Zero] [Data Name/Arithmetic Operation]
Exemplo
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 executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido que produz o seguinte resultado:
WS-NUM1 IS NEGATIVE WS-NUM2 IS POSITIVE
Classe estado é utilizado para verificar se um operando contém apenas letras ou dados numéricos. Os espaços são considerados em ordem alfabética, ALFABÉTICO-MENOR, e alfabético-SUPERIOR.
Sintaxe é a seguinte da classe estado declarações:
[Data Name/Arithmetic Operation>] [IS] [NOT] [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER] [Data Name/Arithmetic Operation]
Exemplo
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 executar o programa em COBOL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
WS-NUM1 IS ALPHABETIC WS-NUM1 IS NUMERIC
O nome da condição é um nome definido pelo usuário. Ele contém um conjunto de valores especificados pelo usuário. Ele comporta-se como variáveis Booleanas. Elas são definidas com número do nível 88. Ele não terá uma PIC cláusula.
Sintaxe é a seguinte de condição definida pelo usuário declarações:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
Exemplo
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 executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Passed with 065 marks
Negava condição é dada por NÃO usar a palavra-chave. Se a condição for verdadeira, temos dado não na frente dele, então seu valor final será falso.
Sintaxe é a seguinte para Negada desde declarações:
IF NOT [CONDITION] COBOL Statements END-IF.
Exemplo
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 executar o programa em COBOL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
ELSE-BLOCK
UM combinado estado contém duas ou mais condições conectado usando os operadores lógicos AND ou OR.
Sintaxe é a seguinte condição combinada de declarações:
IF [CONDITION] AND [CONDITION] COBOL Statements END-IF.
Exemplo
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 executar o programa em COBOL.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
Both condition OK
Avaliar verbo não é um substituto de uma série de IF-ELSE. Ela pode ser usada para avaliar mais de uma condição. É semelhante a instrução SWITCH em C os programas.
Exemplo
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 executar o programa em COBOL:
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
Quando você compilar e executar o programa acima referido, que produz o seguinte resultado:
WS-A GREATER THAN 2