COBOL - Declarações Condicionais
As instruções condicionais são usadas para alterar o fluxo de execução dependendo de certas condições especificadas pelo programador. As declarações condicionais sempre serão avaliadas como verdadeiras ou falsas. As condições são usadas em declarações IF, Evaluate e Perform. Os diferentes tipos de condições são os seguintes -
- Declaração de condição IF
- Condição de relação
- Condição de Sinal
- Condição de Classe
- Condição-Nome Condição
- Condição negada
- Condição Combinada
Declaração de condição IF
A instrução IF verifica as condições. Se uma condição for verdadeira, o bloco IF é executado; e se a condição for falsa, o bloco ELSE é executado.
END-IFé usado para encerrar o bloco IF. Para encerrar o bloco IF, um ponto final pode ser usado em vez de END-IF. Mas é sempre preferível usar END-IF para vários blocos IF.
Nested-IF- Blocos IF aparecendo dentro de outro bloco IF. Não há limite para a profundidade das instruções IF aninhadas.
Sintaxe
A seguir está a sintaxe das declarações de condição IF -
IF [condition] THEN
[COBOL statements]
ELSE
[COBOL statements]
END-IF.
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK
Condição de relação
A condição de relação compara dois operandos, um dos quais pode ser um identificador, literal ou expressão aritmética. A comparação algébrica de campos numéricos é feita independentemente do tamanho e da cláusula de uso.
For non-numeric operands
Se dois operandos não numéricos de tamanho igual forem comparados, os caracteres serão comparados a partir da esquerda com as posições correspondentes até que o final seja alcançado. O operando que contém maior número de caracteres é declarado maior.
Se dois operandos não numéricos de tamanho desigual são comparados, então o item de dados mais curto é anexado com espaços no final até que o tamanho dos operandos se torne igual e então comparado de acordo com as regras mencionadas no ponto anterior.
Sintaxe
A seguir está a sintaxe das declarações de condição de relação -
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Equal to (=),Greater than (>), Less than (<),
Greater than or Equal (>=), Less than or equal (<=) ]
[Data Name/Arithmetic Operation]
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
WS-NUM1 IS GREATER THAN WS-NUM2
Condição de Sinal
A condição de sinal é usada para verificar o sinal de um operando numérico. Ele determina se um determinado valor numérico é maior, menor ou igual a ZERO.
Sintaxe
A seguir está a sintaxe das declarações de condição de sinal -
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Positive, Negative or Zero]
[Data Name/Arithmetic Operation]
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE
Condição de Classe
A condição de classe é usada para verificar se um operando contém apenas alfabetos ou dados numéricos. Os espaços são considerados em ALFABÉTICO, ALFABÉTICO INFERIOR e ALFABÉTICO SUPERIOR.
Sintaxe
A seguir está a sintaxe das declarações de condição de classe -
[Data Name/Arithmetic Operation>]
[IS] [NOT]
[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]
[Data Name/Arithmetic Operation]
Example
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-NUM2 IS NUMERIC'.
STOP RUN.
JCL para executar o programa COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC
Condição-nome Condição
Um nome de condição é um nome definido pelo usuário. Ele contém um conjunto de valores especificados pelo usuário. Ele se comporta como variáveis booleanas. Eles são definidos com o nível 88. Não terá uma cláusula PIC.
Sintaxe
A seguir está a sintaxe das declarações de condição definidas pelo usuário -
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Passed with 065 marks
Condição negada
A condição negada é dada usando a palavra-chave NOT. Se uma condição for verdadeira e não tivermos dado antes dela, então seu valor final será falso.
Sintaxe
A seguir está a sintaxe das declarações de condição negadas -
IF NOT [CONDITION]
COBOL Statements
END-IF.
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
ELSE-BLOCK
Condição Combinada
Uma condição combinada contém duas ou mais condições conectadas usando operadores lógicos AND ou OR.
Sintaxe
A seguir está a sintaxe das declarações de condição combinadas -
IF [CONDITION] AND [CONDITION]
COBOL Statements
END-IF.
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
Both condition OK
Avaliar Verbo
Avaliar verbo é uma substituição de uma série de instruções IF-ELSE. Ele pode ser usado para avaliar mais de uma condição. É semelhante à instrução SWITCH em programas C.
Example
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 COBOL acima -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
Quando você compila e executa o programa acima, ele produz o seguinte resultado -
WS-A GREATER THAN 2