Linguagem de programação COBOL - EVALUATE
000001 IF ACONTA EQUAL ZEROES 000002 EVALUATE TRUE 000003 WHEN BCONTA = 2 000004 MOVE 16 TO K 000005 MOVE 0 TO CCONTA DCONTA 000006 WHEN BCONTA = 3 000007 MOVE 20 TO FATOR 000008 WHEN BCONTA = 4 000009 MOVE BCONTA TO FATOR 000010 WHEN BCONTA = 5 000011 IF CAR-ENTRA EQUAL "X" OR "x" 000012 MOVE 1 TO FATOR 000013 ELSE 000014 MOVE 2 TO FATOR 000015 END-IF 000016 WHEN BCONTA = 6 000017 IF CAR-ENTRA EQUAL "N" OR "n" 000018 MOVE 3 TO FATOR 000019 ELSE 000020 MOVE 4 TO FATOR 000021 END-IF 000022 END-EVALUATE 000023 END-IF.
000001 EVALUATE WSS-TIPO-ACAO 000002 WHEN "I" 000003 PERFORM R100-ROTINA-INCLUIR THRU R100-FIM 000004 WHEN "A" 000005 PERFORM R200-ROTINA-ALTERAR THRU R200-FIM 000006 WHEN "E" 000007 PERFORM R300-ROTINA-EXCLUIR THRU R300-FIM 000008 WHEN OTHER 000009 PERFORM R900-ROTINA-ERRO THRU R900-FIM 000010 END-EVALUATE.
000001 EVALUATE MEDIA 000002 WHEN 90 THRU 100 000003 MOVE "A" TO GRAU 000004 WHEN 80 THRU 89 000005 MOVE "B" TO GRAU 000006 WHEN 70 THRU 79 000007 MOVE "C" TO GRAU 000008 WHEN 60 THRU 69 000009 MOVE "D" TO GRAU 000010 WHEN 00 THRU 59 000011 MOVE "F" TO GRAU 000012 WHEN OTHER 000013 PERFORM R900-ROTINA-ERRO THRU R900-FIM 000014 END-EVALUATE.
000001 EVALUATE TRUE 000002 WHEN MEDIA >= 90 AND <= 100 000003 MOVE "A" TO GRAU 000004 WHEN MEDIA >= 80 AND <= 89 000005 MOVE "B" TO GRAU 000006 WHEN MEDIA >= 70 AND <= 79 000007 MOVE "C" TO GRAU 000008 WHEN MEDIA >= 60 AND <= 69 000009 MOVE "D" TO GRAU 000010 WHEN MEDIA >= 00 AND <= 59 000011 MOVE "F" TO GRAU 000012 WHEN OTHER 000013 PERFORM R900-ROTINA-ERRO THRU R900-FIM 000014 END-EVALUATE.
000001 EVALUATE IDADE 000002 WHEN 0 THRU 19 000003 PERFORM R100-ROTINA-MENOR 000004 WHEN 20 THRU 99 000005 PERFORM R200-ROTINA-ADULTO 000006 WHEN OTHER 000007 PERFORM R900-ROTINA-VER-IDADE 000008 END-EVALUATE.
000001 EVALUATE TRUE 000002 WHEN IDADE >= 0 AND <= 19 000003 PERFORM R100-ROTINA-MENOR 000004 WHEN IDADE >= 20 AND <= 99 000005 PERFORM R200-ROTINA-ADULTO 000006 WHEN OTHER 000007 PERFORM R900-ROTINA-VER-IDADE 000008 END-EVALUATE.
000001 EVALUATE IDADE <= 19 000002 WHEN TRUE 000003 PERFORM R100-ROTINA-MENOR 000004 WHEN FALSE 000005 PERFORM R200-ROTINA-ADULTO 000006 END-EVALUATE.
000001 EVALUATE TRUE 000002 WHEN IDADE <= 19 000003 PERFORM R100-ROTINA-MENOR 000004 WHEN OTHER 000005 PERFORM R200-ROTINA-ADULTO 000006 END-EVALUATE.
EVALUATE (WS-CARLOS01 = 10) ALSO (WS-CARLOS02 = 20) WHEN TRUE ALSO TRUE PERFORM R100-TRUE-TRUE THRU R100-FIM WHEN TRUE ALSO FALSE PERFORM R200-TRUE-FALSE THRU R200-FIM WHEN FALSE ALSO TRUE PERFORM R300-FALSE-TRUE THRU R300-FIM WHEN FALSE ALSO FALSE PERFORM R400-FALSE-FALSE THRU R400-FIM END-EVALUATE.
* As variáveis WSS-CONTA-01 e WSS-CONTA-02 podem conter os valores 10, 20 ou 30 * e todas as combinações possiveis entre eles WSS-CONTA-01 = 10 E WSS-CONTA-02 = 10 WSS-CONTA-01 = 10 E WSS-CONTA-02 = 20 WSS-CONTA-01 = 10 E WSS-CONTA-02 = 30 WSS-CONTA-01 = 20 E WSS-CONTA-02 = 10 WSS-CONTA-01 = 20 E WSS-CONTA-02 = 20 WSS-CONTA-01 = 20 E WSS-CONTA-02 = 30 WSS-CONTA-01 = 30 E WSS-CONTA-02 = 10 WSS-CONTA-01 = 30 E WSS-CONTA-02 = 20 WSS-CONTA-01 = 30 E WSS-CONTA-02 = 30
* Por favor esqueçam essa codificação IF WSS-CONTA-01 EQUAL 10 AND WSS-CONTA-02 EQUAL 10 PERFORM P1010-PROCESSA THRU P1010-FIM ELSE IF WSS-CONTA-01 EQUAL 10 AND WSS-CONTA-02 EQUAL 20 PERFORM P1020-PROCESSA THRU P1020-FIM ELSE IF WSS-CONTA-01 EQUAL 10 AND WSS-CONTA-02 EQUAL 30 PERFORM P1030-PROCESSA THRU P1030-FIM ELSE IF WSS-CONTA-01 EQUAL 20 AND WSS-CONTA-02 EQUAL 10 PERFORM P2010-PROCESSA THRU P2010-FIM ELSE IF WSS-CONTA-01 EQUAL 20 AND WSS-CONTA-02 EQUAL 20 PERFORM P2020-PROCESSA THRU P2020-FIM ELSE IF WSS-CONTA-01 EQUAL 20 AND WSS-CONTA-02 EQUAL 30 PERFORM P2030-PROCESSA THRU P2030-FIM ELSE IF WSS-CONTA-01 EQUAL 30 AND WSS-CONTA-02 EQUAL 10 PERFORM P3010-PROCESSA THRU P3010-FIM ELSE IF WSS-CONTA-01 EQUAL 30 AND WSS-CONTA-02 EQUAL 20 PERFORM P3020-PROCESSA THRU P3020-FIM ELSE PERFORM P3030-PROCESSA THRU P3030-FIM END-IF END-IF END-IF END-IF END-IF END-IF END-IF END-IF
* Por favor esqueçam essa codificação, tambem IF WSS-CONTA-01 EQUAL 10 IF WSS-CONTA-02 EQUAL 10 PERFORM P1010-PROCESSA THRU P1010-FIM ELSE IF WSS-CONTA-02 EQUAL 20 PERFORM P1020-PROCESSA THRU P1020-FIM ELSE PERFORM P1030-PROCESSA THRU P1030-FIM END-IF END-IF ELSE IF WSS-CONTA-01 EQUAL 20 IF WSS-CONTA-02 EQUAL 10 PERFORM P2010-PROCESSA THRU P2010-FIM ELSE IF WSS-CONTA-02 EQUAL 20 PERFORM P2020-PROCESSA THRU P2020-FIM ELSE PERFORM P2030-PROCESSA THRU P2030-FIM END-IF END-IF ELSE IF WSS-CONTA-02 EQUAL 10 PERFORM P3010-PROCESSA THRU P3010-FIM ELSE IF WSS-CONTA-02 EQUAL 20 PERFORM P3020-PROCESSA THRU P3020-FIM ELSE PERFORM P3030-PROCESSA THRU P3030-FIM END-IF END-IF END-IF END-IF
* Codificação recomendável EVALUATE TRUE WHEN WSS-CONTA-01 EQUAL 10 EVALUATE WSS-CONTA-02 WHEN 10 PERFORM P1010-PROCESSA THRU P1010-FIM WHEN 20 PERFORM P1020-PROCESSA THRU P1020-FIM WHEN OTHER PERFORM P1030-PROCESSA THRU P1030-FIM END-EVALUATE WHEN WSS-CONTA-01 EQUAL 20 EVALUATE WSS-CONTA-02 WHEN 10 PERFORM P2010-PROCESSA THRU P2010-FIM WHEN 20 PERFORM P2020-PROCESSA THRU P2020-FIM WHEN OTHER PERFORM P2030-PROCESSA THRU P2030-FIM END-EVALUATE WHEN OTHER EVALUATE WSS-CONTA-02 WHEN 10 PERFORM P3010-PROCESSA THRU P3010-FIM WHEN 20 PERFORM P3020-PROCESSA THRU P3020-FIM WHEN OTHER PERFORM P3030-PROCESSA THRU P3030-FIM END-EVALUATE END-EVALUATE
* Se fizeres essa combinação melhor ainda * crie tres variáveis *----------------------------------------------------------------- WORKING-STORAGE SECTION *----------------------------------------------------------------- 01 WSS-AUXILIARES. 05 WSS-CONTA PIC 9(004) VALUE ZEROES. 05 WSS-CONTA-R REDEFINES WSS-CONTA. 10 WS-CONTA-01-N PIC 9(002). 10 WS-CONTA-02-N PIC 9(002). *----------------------------------------------------------------- PROCEDURE DIVISION. *----------------------------------------------------------------- MOVE WSS-CONTA-01 TO WSS-CONTA-01-N MOVE WSS-CONTA-02 TO WSS-CONTA-02-N EVALUATE WSS-CONTA WHEN 1010 PERFORM P1010-PROCESSA THRU P1010-FIM WHEN 1020 PERFORM P1020-PROCESSA THRU P1020-FIM WHEN 1030 PERFORM P1030-PROCESSA THRU P1030-FIM WHEN 2010 PERFORM P2010-PROCESSA THRU P2010-FIM WHEN 2020 PERFORM P2020-PROCESSA THRU P2020-FIM WHEN 2030 PERFORM P2030-PROCESSA THRU P2030-FIM WHEN 3010 PERFORM P3010-PROCESSA THRU P3010-FIM WHEN 3020 PERFORM P3020-PROCESSA THRU P3020-FIM WHEN OTHER PERFORM P3030-PROCESSA THRU P3030-FIM END-EVALUATE
Este exemplo do comando EVALUATE é um pouco mais complexo e tem abaixo do mesmo o equivalente ao comando IF. Exemplo mais complexo do comando EVALUATE: EVALUATE A = B ALSO C > D ALSO TRUE WHEN TRUE ALSO TRUE ALSO E = F + 15 PERFORM ROTINA-1 WHEN TRUE ALSO TRUE ALSO E > 12 PERFORM ROTINA-2 WHEN TRUE ALSO FALSE ALSO ANY PERFORM ROTINA-3 WHEN FALSE ALSO TRUE ALSO ANY PERFORM ROTINA-4 WHEN FALSE ALSO FALSE ALSO ANY PERFORM ROTINA-5 END-EVALUATE. O comando IF equivalente ao EVALUATE acima: IF A EQUAL B IF C GREATER THAN D IF E EQUAL F + 15 PERFORM ROTINA-1 ELSE IF E GREATER THAN 12 PERFORM ROTINA-2 END-IF END-IF ELSE PERFORM ROTINA-3 END-IF ELSE IF C GREATER THAN D PERFORM ROTINA-4 ELSE PERFORM ROTINA-5 END-IF END-IF
Outro exemplo mais complexo do comando EVALUATE: *----------------------------------------------------------------- WORKING-STORAGE SECTION. *----------------------------------------------------------------- 01 WS-AUXILIARES. 05 WS-IDADE PIC 9(003). 05 WS-SEXO PIC X(001). 05 WS-DESCRICAO PIC X(020). 05 A PIC 9(003). 05 B PIC 9(004). 05 C PIC 9(004). 05 D PIC 9(004). 05 E PIC 9(005). 05 F PIC 9(006). *----------------------------------------------------------------- PROCEDURE DIVISION. *----------------------------------------------------------------- EVALUATE TRUE ALSO TRUE WHEN WS-IDADE < 13 ALSO WS-SEXO = 'M' MOVE 'MENINO JOVEM' TO WS-DESCRICAO WHEN WS-IDADE < 13 ALSO WS-SEXO = 'F' MOVE 'MENINA JOVEM' TO WS-DESCRICAO WHEN WS-IDADE > 12 AND WS-IDADE < 20 ALSO WS-SEXO = 'M' MOVE 'MENINO ADOLESCENTE' TO WS-DESCRICAO WHEN WS-IDADE > 12 AND WS-IDADE < 20 ALSO WS-SEXO = 'F' MOVE 'MENINA ADOLESCENTE' TO WS-DESCRICAO WHEN WS-IDADE > 19 ALSO WS-SEXO = 'M' MOVE 'HOMEM ADULTO' TO WS-DESCRICAO WHEN WS-IDADE > 19 ALSO WS-SEXO = 'F' MOVE 'MULHER ADULTA' TO WS-DESCRICAO WHEN OTHER MOVE 'DADOS INVALIDOS' TO WS-DESCRICAO END-EVALUATE EVALUATE TRUE ALSO TRUE WHEN A + B < 10 ALSO C = 10 MOVE 'CASO 1' TO WS-DESCRICAO WHEN A + B > 50 ALSO C = ( D + E ) / F MOVE 'CASO 2' TO WS-DESCRICAO WHEN OTHER MOVE 'OUTROS CASOS' TO WS-DESCRICAO END-EVALUATE.
Os exemplos do comando EVALUATE abaixo descritos trazem o mesmo resultado.
Exemplo do comando EVALUATE usando o nível 88 (oitenta e oito).