COBOL - Computação de Declaração
A instrução COMPUTE atribui o valor de uma expressão aritmética a um ou mais itens de dados.
As operações aritméticas podem ser combinadas sem as restrições de recebimento de itens de dados impostas pelas regras para as instruções ADD, SUBTRACT, MULTIPLY e DIVIDE com a instrução COMPUTE.
Quando as operações aritméticas são combinadas, a instrução COMPUTE pode ser mais eficiente do que as instruções aritméticas separadas escritas em série.
Syntax:
COMPUTE identifier-1 [ROUNDED] =[EQUAL] arithmetic expression
[ON SIZE ERROR imperative-statement-1]
[NOT ON SIZE ERROR imperative-statement-2]
[END-COMPUTE]
|
identificador-1
Deve nomear um item numérico elementar ou um item numérico editado elementar.
Pode nomear um item de dados de ponto flutuante elementar.
arithmetic-expression
Pode ser qualquer expressão aritmética, conforme definido em Expressões aritméticas.
Quando a instrução COMPUTE é executada, o valor da expressão aritmética é calculado e armazenado como o novo valor de cada item de dados referenciado pelo identificador-1.
Frases opcionais na operação de computação:
ROUNDED phrase
ROUNDED Com a opção ROUNDED, o computador sempre arredondará o resultado para a especificação da cláusula PICTURE do campo receptor. Geralmente é codificado após o campo a ser arredondado.
SIZE ERROR phrases
Se esta for codificada com qualquer operação que terminou com SIZE error não será executada, mas a instrução que segue ON SIZE ERROR será executada.
NOT ON SIZE ERROR phrases
Isto é o oposto de SIZE ERROR. Se isso for codificado com qualquer operação que não tenha terminado com erro SIZE, a instrução a seguir ON SIZE ERROR será executada.
END-COMPUTE phrase
Esse terminador de escopo explícito serve para delimitar o escopo da instrução COMPUTE. END-COMPUTE permite que uma instrução condicional COMPUTE seja aninhada em outra instrução condicional. END-COMPUTE também pode ser usado com uma instrução COMPUTE imperativa.
Tipos:
- Se apenas uma operação matemática for executada, use a instrução que executa essa operação (ADD, SUBTRACT, MULTIPLY ou DIVIDE). Reserve a instrução COMPUTE para fórmulas ou exponenciação, pois ela não possui uma instrução separada associada a ela.
- Os campos de recebimento podem ser campos numéricos ou editados numéricos.
- Use a cláusula SIZE ERROR para detectar estouro de campo no campo de recebimento.
- Em todos os formatos, os resultados matematicamente corretos são calculados, mas se o campo receptor for muito curto na parte inteira ou decimal, o resultado será truncado, o inteiro à esquerda e o decimal à direita.
Incluir a frase ROUNDED fará com que o campo de resposta seja arredondado em vez de truncado. Roundig é sempre feito na parte menos significativa da resposta.
Exemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. TSTCOMPT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-N1 PIC 9(3) VALUE 5.
01 WS-N2 PIC 9(4) VALUE 7.
01 WS-N3 PIC 9(4) VALUE 8.
01 WS-NA PIC 9(3) VALUE 80.
01 WS-NB PIC 9(3) VALUE 20.
01 WS-NC PIC 9(3).
PROCEDURE DIVISION.
COMPUTE WS-NC= (WS-N1 * WS-N2) - (WS-NA / WS-NB) + WS-N3.
DISPLAY "WS-NUM1 : " WS-N1
DISPLAY "WS-NUM2 : " WS-N2
DISPLAY "WS-NUM3 : " WS-N3
DISPLAY "WS-NUMA : " WS-NA
DISPLAY "WS-NUMB : " WS-NB
DISPLAY "Result of compute is : " WS-NC
STOP RUN.
|
Saída:
WS-NUM1 : 005
WS-NUM2 : 0007
WS-NUM3 : 0008
WS-NUMA : 080
WS-NUMB : 020
Result of compute is : 039
|