A instrução COMPUTE permite realizar expressões aritméticas e atribuir diretamente o resultado a um campo ou variável. É uma alternativa mais flexível ao ADD, SUBTRACT, MULTIPLY e DIVIDE, pois permite combinar múltiplas operações numa única linha.

📌 Para que serve

  • Executar cálculos matemáticos complexos.

  • Atribuir o resultado direto da expressão a uma variável.

  • Substitui instruções aritméticas simples com uma forma mais concisa e legível.

🧾 Sintaxe básica

COMPUTE destino = expressão-aritmética
    [ROUNDED]
    [ON SIZE ERROR instruções]
    [NOT ON SIZE ERROR instruções]
END-COMPUTE.

A cláusula END-COMPUTE é opcional, mas recomendada em códigos modernos, especialmente quando usado dentro de blocos condicionais.

✍️ Exemplos simples

COMPUTE TOTAL = VALOR1 + VALOR2 - DESCONTO.
COMPUTE MEDIA = (NOTA1 + NOTA2 + NOTA3) / 3.
COMPUTE RESULTADO = (A + B) * C.

🧮 Com cláusula GIVING (alternativa ao MOVE com cálculo)

COMPUTE WS-RESULTADO = (VALOR1 + VALOR2) * 0.1
    ON SIZE ERROR
        DISPLAY 'Erro: resultado excedeu tamanho do campo'.

🔄 Utilização com tabelas (arrays)

COMPUTE SOMA-TABELA = VALORES(1) + VALORES(2) + VALORES(3).
COMPUTE RESULTADO = ITENS(INDICE) * QUANTIDADE(INDICE).

🎯 Cláusulas importantes

🔹 ROUNDED

Arredonda o resultado quando há casas decimais que ultrapassam a precisão do campo.

COMPUTE RESULTADO ROUNDED = VALOR1 / VALOR2.

🔹 ON SIZE ERROR

Define ações a serem tomadas caso o resultado não caiba no campo de destino.

COMPUTE TOTAL = A + B
    ON SIZE ERROR
        DISPLAY "ERRO DE TAMANHO".

⚠️ Regras e boas práticas

  • O resultado será truncado se o campo de destino não tiver espaço suficiente e a cláusula ROUNDED não for usada.

  • A ordem das operações segue a precedência matemática tradicional.

  • Ideal para evitar múltiplos ADD, SUBTRACT ou MOVE seguidos.

  • Permite usar tabelas, literais, variáveis e expressões combinadas.

  • O destino pode ser um campo numérico, indexado ou até um elemento de grupo (com cuidados).

 

✅ Conclusão

A instrução COMPUTE é poderosa e flexível, permitindo realizar cálculos complexos de forma direta e clara no COBOL. Seu uso contribui para melhor legibilidade, manutenção do código e economia de instruções. Utilize ROUNDED e ON SIZE ERROR sempre que trabalhar com valores sensíveis a arredondamentos ou limites de tamanho, garantindo maior controle e segurança no processamento aritmético.