Menu

COBOL - A instrução Add


A instrução ADD soma dois ou mais operandos numéricos e armazena o resultado.

A instrução ADD é usada para adicionar itens numéricos. Existem três formatos que funcionam de formas diferentes e estão descritos abaixo,

Formato 1: A instrução Add

O primeiro formato é usado para adicionar field(s) ou value(s) para outro campo. O field(s) ou value(s) listados entre ADD e TO são somados e adicionados para o valor do field(s) seguindo para TO, onde a resposta é arquivada

Syntax:

ADD {identifier-1 or literal-1} ...TO {indentifier-2 [ROUNDED]}...
   [ON SIZE ERROR imperative-statement-1]
   [NOT ON SIZE ERROR imperative-statement-2]
[END-ADD]

identificador-1, identificador-2 deve nomear um item numérico elementar.

literal Deve ser um literal numérico. Itens de dados de ponto flutuante e literais podem ser usados ​​em qualquer lugar em que um item de dados numérico ou literal possa ser especificado.

Example:

ADD A TO B

- - O valor em A é somado ao valor em B e o resultado é armazenado em B. O valor em A permanece inalterado.

Além disso,

ADD C D TO E F

- A soma dos valores em C e D é adicionada ao valor em E, armazenando a resposta em E e a soma de C e D também é adicionada a F armazenando o valor em F. Os valores em C e D permanecem inalterados .
Formato 2: Instrução ADD com frase GIVING

O segundo formato é usado para adicionar field(s) ou value(s) armazenando a resposta em um campo diferente. O field(s) ou value(s) ou valores listados entre ADD e GIVING são adicionados e armazenados no field após o field(s) após o GIVING.

Syntax:

ADD {identifier-1 or literal-1} ...TO {indentifier-2 or literal-2} GIVING {indentifier-3 [ROUNDED]}...
   [ON SIZE ERROR imperative-statement-1]
   [NOT ON SIZE ERROR imperative-statement-2]
[END-ADD]

idificador-1, idificador-2 deve nomear um item numérico elementar, exceto quando seguir a palavra GIVING. Cada identificador que segue a palavra GIVING deve nomear um item numérico elementar ou numérico editado.

literal Deve ser um literal numérico. Itens de dados de ponto flutuante e literais podem ser usados ​​em qualquer lugar em que um item de dados numérico ou literal possa ser especificado.

Exemplo:

ADD A TO B GIVING C

- O valor em A é somado ao valor em B e o resultado é armazenado em C. Os valores em A e B permanecem inalterados.
Formato 3: Instrução ADD com frase CORRESPONDING

O terceiro formato é usado para adicionar field(s) de um grupo para subordinar field(s) de outro, armazenando a resposta nesses campos. Esses campos subordinados do identificador de item de grupo-1 são adicionados e armazenados naqueles com exatamente o mesmo nome no identificador de item de grupo-2. Os nomes dos itens subordinados devem ser escritos exatamente da mesma maneira em ambos os grupos para se qualificar para participar da adição.

Syntax:

ADD {CORRESPONDING or CORR} indentifier-1 TO indentifier-2 [ROUNDED]
   [ON SIZE ERROR imperative-statement-1]
   [NOT ON SIZE ERROR imperative-statement-2]
[END-ADD]

identificador-1, identificador-2deve nomear um item de grupo alfanumérico ou item de grupo nacional.

literal Deve ser um literal numérico. Itens de dados de ponto flutuante e literais podem ser usados ​​em qualquer lugar em que um item de dados numérico ou literal possa ser especificado.

Exemplo: se duas hierarquias de dados forem definidas da seguinte forma:

05 ITEM-1 OCCURS 6.
   10 ITEM-A PIC S9(3).
   10 ITEM-B PIC +99.9.
   10 ITEM-C PIC X(4).
   10 ITEM-D PIC REDEFINES ITEM-C PIC 9(4).
   10 ITEM-E USAGE COMP-1.
   10 ITEM-F USAGE INDEX.

05 ITEM-2.
   10 ITEM-A PIC S9(3).
   10 ITEM-B PIC +9V9.
   10 ITEM-C PIC A(4).
   10 ITEM-D PIC 9(4).
   10 ITEM-E PIC 9(9) USAGE COMP.
   10 ITEM-F USAGE INDEX.

Então, se

ADD CORR ITEM-2 TO ITEM-1(X)

is specified,

ITEM-A and ITEM-A(X), ITEM-B and ITEM-B(X), and ITEM-E and ITEM-E(X) are considered to be corresponding and are added together.

ITEM-C and ITEM-C(X) are not included because they are not numeric.

ITEM-D and ITEM-D(X) are not included because ITEM-D(X) includes a REDEFINES clause in its data description.

ITEM-F and ITEM-F(X) are not included because they are defined as USAGE IS INDEX.

Note that ITEM-1 is valid as either identifier-1 or identifier-2.

Se qualquer uma das operações individuais na instrução ADD CORRESPONDING produzir uma condição de erro de tamanho, a instrução imperativa-1 na frase ON SIZE ERROR não será executada até que todas as adições individuais sejam concluídas.


Frase ARREDONDADA:

  • Quando o valor absoluto do resultado de uma avaliação aritmética, após o alinhamento do ponto decimal, exceder o maior valor que pode estar contido no campo de resultado.

  • Quando ocorre a divisão por zero.

  • Se a frase ON SIZE ERROR for especificada e ocorrer uma condição de erro de tamanho, o valor do identificador resultante afetado pelo erro de tamanho não será alterado, ou seja, os resultados do erro não serão colocados no identificador de recebimento. Após a conclusão da execução da operação aritmética, a instrução imperativa na frase ON SIZE ERROR é executada, o controle é transferido para o final da instrução aritmética e a frase NOT ON SIZE ERROR, se especificada, é ignorada.

  • Se a frase NOT ON SIZE ERROR tiver sido especificada e, após a execução de uma operação aritmética, não existir uma condição de erro de tamanho, a frase NOT ON SIZE ERROR será executada.

  • Para instruções ADD CORRESPONDING e SUBTRACT CORRESPONDING, se uma operação aritmética individual causar uma condição de erro de tamanho, a instrução imperativa ON SIZE ERROR não será executada até que todas as adições ou subtrações individuais tenham sido concluídas.

  • Se a frase ROUNDED for especificada, o arredondamento ocorrerá antes da verificação de erros de tamanho.

Frase ARREDONDADA:

  • Após o alinhamento do ponto decimal, o número de casas na fração do resultado de uma operação aritmética é comparado com o número de casas fornecido para a fração do identificador resultante.

  • Quando o tamanho do resultado fracionário excede o número de locais fornecidos para seu armazenamento, ocorre truncamento, a menos que ROUNDED seja especificado. Quando ROUNDED é especificado, o dígito menos significativo do identificador resultante é aumentado em 1 sempre que o dígito mais significativo do excesso for maior ou igual a 5.

END-ADD frase:

Esse terminador de escopo explícito serve para delimitar o escopo da instrução ADD.

END-ADD permite que uma instrução ADD condicional seja aninhada em outra instrução condicional. END-ADD também pode ser usado com uma instrução ADD imperativa.


Pontas:

  • Os campos a serem adicionados devem ter figuras numéricas, ou seja, podem conter apenas os caracteres 9, S e V em suas cláusulas PIC.

  • 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. O arredondamento é sempre feito na parte menos significativa da resposta.