Conceitos
A instrução ADD é utilizada para somar o conteúdo dos operandos da instrução. Os operandos deverão ser do tipo numérico e a instrução ADD tem três formatos:
Formato 1:
ADD operando-1 TO operando-2 [ROUNDED] [ON SIZE ERROR declaração-imperativa-1]
Neste formato, a instrução ADD soma o conteúdo das variáveis ou literais de operando-1 ao conteúdo das variáveis de operando-2 e armazena o resultado da soma nas variáveis de operando-2. Os valores existentes em operando-2 são perdidos.
Em operando-1 e operando-2 podem existir diversas variáveis. As variáveis de operando-1 podem ser literais numéricas e as variáveis de operando-2 devem ser variáveis do tipo numérico.
Por exemplo, dadas as variáveis;
77 VALOR-1 PIC 99 VALUE 5.
77 VALOR-2 PIC 99 VALUE 10.
77 VALOR-3 PIC 99 VALUE 12.
77 VALOR-4 PIC 99 VALUE 13.
A instrução "ADD VALOR-1 VALOR-2 TO VALOR-3 VALOR-4" terá como resultado:
VALOR-1 = 5
VALOR-2 = 10
VALOR-3 = 27
VALOR-4 = 28
Formato 2:
ADD operando-1 TO operando-2 GIVING operando-3 [ROUNDED] [ON SIZE ERROR declaração-imperativa-1]
Neste formato, a instrução ADD soma o conteúdo das variáveis de operando-1 ao conteúdo das variáveis de operando-2 e armazena o resultado da soma nas variáveis de operando-3. Os valores existentes em operando-3 são perdidos.
Em operando-1 e operando-2 podem existir diversas variáveis. As variáveis de operando-1 e operando-2 podem ser literais numéricas e as variáveis de operando-3 devem ser variáveis do tipo numérico.
Por exemplo, Usando as variáveis definidas acima, a instrução "ADD VALOR-1 TO VALOR-2 GIVING VALOR-3 VALOR-4, terá como resultado:
VALOR-1 = 5
VALOR-2 = 10
VALOR-3 = 15
VALOR-4 = 15
Formato 3:
ADD CORRESPONDING (ou CORR) operando-1 TO operando-2 [ROUNDED] [ON SIZE ERROR declaração-imperativa-1]
Neste formato os operandos deverão ser itens de grupo e a instrução ADD soma o conteúdo dos itens elementares de operando-1 ao conteúdo dos itens elementares de operando-2 e armazena o resultado da soma nos itens elementares de operando-2. Os itens elementares dos dois operandos deverão ter o mesmo nome e o mesmo tamanho.
Dados os operandos:
01 CONJUNTO-01.
05 VALOR-01 PIC 99 VALUE 5.
05 VALOR-02 PIC 99 VALUE 4.
01 CONJUNTO-02.
05 VALOR-01 PIC 99 VALUE 3.
05 VALOR-02 PIC 99 VALUE 2.
Por exemplo, a instrução "ADD CORR CONJUNTO-01 TO CONJUNTO-02, terá como resultado:
CONJUNTO-01.
VALOR-01 = 5
VALOR-02 = 4
CONJUNTO-02.
VALOR-01 = 8
VALOR-02 = 6
Cláusulas Adicionais
A cláusula "ROUNDED" é usada quando os operandos forem decimais. Se os operandos que receberem o resultado da instrução ADD não tiverem casas decimais suficientes, ocorrerá truncamento e o resultado perderá as decimais. A cláusula ROUNDED executa o arrendondamento clássico do resultado. Os valores menores que 5 são truncados, e os maiores são arredondados para cima.
A cláusula "ON SIZE ERROR declaração-imperativa-1" faz com que a declaração-imperativa-1 seja executada quando ocorrer estouro no operando receptor do resultado. Normalmente esta cláusula é ultilizada para exibir uma mensagem de erro, parar o programa ou desviar a execução do programa para um parágrafo especial de tratamento de erro.
Como exemplo a instrução "ADD VALOR-1 TO VALOR-2 ON SIZE ERROR DISPLAY “ESTOURO DO CAMPO DE RESULTADO” STOP RUN.