A instrução SUBTRACT
no COBOL é usada para subtrair valores numéricos e armazenar o resultado. Pode ser usada com diferentes formatos para subtração direta, com destino intermediário (GIVING
) ou em estruturas com campos de nomes iguais (CORRESPONDING
).
📌 Para que serve
-
Subtrair um ou mais valores de outros valores.
-
Armazenar o resultado diretamente no(s) operandos ou em um campo de destino.
-
Reduzir valores em campos de grupos automaticamente com
CORRESPONDING
. -
Tratar erros de estouro com
ON SIZE ERROR
.
🧾 Sintaxe básica
SUBTRACT valor-1 FROM destino.
SUBTRACT valor-1 FROM destino-1 destino-2 ROUNDED.
SUBTRACT valor-1 FROM valor-2 GIVING resultado.
SUBTRACT CORRESPONDING grupo-1 FROM grupo-2.
✅ Exemplos práticos
Formato 1 – Subtração direta no mesmo campo
01 A PIC 9(3) VALUE 50.
01 B PIC 9(3) VALUE 20.
SUBTRACT B FROM A.
DISPLAY A. *> Resultado: 30
Formato 2 – Subtração com GIVING
01 A PIC 9(3) VALUE 100.
01 B PIC 9(3) VALUE 25.
01 RESULT PIC 9(3).
SUBTRACT B FROM A GIVING RESULT.
DISPLAY RESULT. *> Resultado: 75
Formato 3 – Subtração com CORRESPONDING
01 GRUPO-A.
05 X PIC 9(3) VALUE 80.
05 Y PIC 9(3) VALUE 40.
01 GRUPO-B.
05 X PIC 9(3) VALUE 30.
05 Y PIC 9(3) VALUE 10.
SUBTRACT CORRESPONDING GRUPO-B FROM GRUPO-A.
DISPLAY GRUPO-A. *> X: 50, Y: 30
⚙️ Como funciona internamente
-
No Formato 1, o valor de
identifier-1
ouliteral-1
é subtraído deidentifier-2
, e o resultado substitui o valor deidentifier-2
. -
No Formato 2, o resultado da subtração é armazenado em um campo separado com a cláusula
GIVING
. -
No Formato 3, os campos de mesmo nome em dois grupos são subtraídos automaticamente entre si.
-
A subtração é feita da esquerda para a direita, respeitando a ordem dos operandos.
⚠️ Regras importantes
-
Todos os campos envolvidos devem ser numéricos elementares (exceto em
GIVING
, onde o resultado pode ser editado). -
Se o resultado exceder a capacidade do campo, ocorre erro de tamanho — pode ser tratado com
ON SIZE ERROR
. -
ROUNDED
aplica arredondamento antes da verificação de erro de tamanho. -
SUBTRACT
pode operar com campos de data compatível, respeitando regras do compilador para campos comDATE FORMAT
.
🔄 Diferenças entre os formatos
Formato | O que faz |
---|---|
Formato 1 | Subtrai diretamente e atualiza o campo destino. |
Formato 2 | Subtrai e grava o resultado em campo específico com GIVING . |
Formato 3 | Subtrai automaticamente campos com o mesmo nome entre grupos. |
🧠 Dicas práticas
-
Use
GIVING
para preservar os operandos e armazenar o resultado separadamente. -
Combine com
ROUNDED
eON SIZE ERROR
para evitar problemas em cálculos financeiros. -
Em estruturas com muitos campos numéricos,
CORRESPONDING
reduz a repetição de código. -
Sempre valide o uso com campos de data: pode exigir formato compatível e configurado no compilador.
✅ Conclusão
A instrução SUBTRACT
é essencial para operações matemáticas no COBOL. Seus três formatos oferecem flexibilidade para cálculos simples ou complexos, com segurança adicional usando ROUNDED
e SIZE ERROR
. Dominar SUBTRACT
é um passo fundamental para qualquer desenvolvedor COBOL que deseja criar programas precisos e confiáveis.