COBOL - Comando SUBTRACT - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

SUBTRACT:

A instrução SUBTRACT subtrai um item numérico ou a soma de dois ou mais itens numéricos de um ou mais itens numéricos e armazena o resultado.


Todos os identificadores ou literais que precedem a palavra-chave FROM são somados e sua soma é subtraída e armazenada imediatamente no identifier-2.
Esse processo é repetido para cada ocorrência sucessiva do identifier-2, na ordem da esquerda para a direita na qual o identifier-2 é especificado.


Todos os identificadores ou literais que precedem a palavra-chave FROM são somados e sua soma é subtraída do identifier-2 ou literal-2.
O resultado da subtração é armazenado como o novo valor de cada item de dados referenciado pelo identifier-3.


Os itens de dados elementares no identifier-1 são subtraídos e os resultados são armazenados nos itens de dados elementares correspondentes no identifier-2.

  • Quando a opção do compilador ARITH (COMPAT) está em vigor, o composto de operandos pode conter no máximo 18 dígitos.

  • Quando a opção do compilador ARITH (EXTEND) está em vigor, o composto de operandos pode conter um máximo de 31 dígitos.

Para todos os formatos:

identifier
No formato 1, deve nomear um item de dados numérico elementar.
No formato 2, deve nomear um item de dados numérico elementar, a menos que o identificador siga a palavra GIVING.
Cada identificador após a palavra GIVING deve nomear um item de dados elementar numérico ou editado numérico.

No formato 3, deve nomear um item de grupo alfanumérico ou um item de grupo nacional.

As seguintes restrições se aplicam aos campos de data:
  • No formato 1, o identifier-1 pode especificar no máximo um campo de data.
    Se o identifier-1 especificar um campo de data, todas as instâncias do identifier-2 deverão especificar um campo de data compatível com o campo de data especificado pelo identifier-1.
    Se o identifier-1 não especificar um campo de data, o identifier-2 poderá especificar um ou mais campos de data, sem restrição nas cláusulas DATE FORMAT.

  • No formato 2, o identifier-1 e o identifier-2 podem especificar no máximo um campo de data.
    Se o identifier-1 especificar um campo de data, o FROM identificador-2 deverá ser um campo de data compatível com o campo de data especificado pelo identifiEr-1.
    identifier-3 pode especificar um ou mais campos de data.
    Se o identifier-2 especificar um campo de data e o identifier-1 não, todas as instâncias do identifier-3 deverão especificar um campo de data compatível com o campo de data especificado pelo identifie-2.

  • No formato 3, se um item no identifier-1 for um campo de data, o item correspondente no identifier-2 deverá ser um campo de data compatível.

  • Um campo de data do último ano é permitido em uma instrução SUBTRACT apenas como identifier-1 e quando o resultado da subtração for uma não-data.

Há duas etapas para determinar o resultado de uma instrução SUBTRACT que envolve um ou mais campos de data:

  1. Subtração: determine o resultado da operação de subtração, conforme descrito em Subtração que envolve campos de data.

  2. Armazenamento: determine como o resultado é armazenado no campo de recebimento.
    (Nos formatos 1 e 3, o campo de recebimento é o identifier-2 ; no formato 3, o campo de recebimento é o GIVING identifier-3 .)
    Para obter detalhes, consulte Armazenando resultados aritméticos que envolvem campos de data.
literal
Deve ser um literal numérico.

Itens de dados e literais de ponto flutuante podem ser usados em qualquer lugar em que itens de dados numéricos e literais possam ser especificados.

ROUNDED phrase

Para obter informações sobre a frase ROUNDED e para considerações sobre operandos, consulte ROUNDED

SIZE ERROR phrases

Para obter informações sobre as frases SIZE ERROR e para considerações sobre operandos, consulte SIZE ERROR

CORRESPONDING phrase (format 3)

Veja a frase CORRESPONDING

END-SUBTRACT phrase

Esse terminador de escopo explícito serve para delimitar o escopo da instrução SUBTRACT.
END-SUBTRACT permite que uma instrução SUBTRACT condicional seja aninhada em outra instrução condicional.
END-SUBTRACT também pode ser usado com uma instrução imperativa SUBTRACT.


Regras para subtração
  1. Todos os literais e campos que são parte da subtração devem ser numéricos. Entretanto, o campo especificado depois da palavra GIVING pode ser um item de relatório.

  2. O campo receptor, que é o primeiro que irá conter o resultado, deve ser um nome de dado e não um literal.
    A instrução a seguir não está correta: SUBTRACT TAXA FROM 100.00.
    Se voce quiser subtrair uma quantia de um literal, deve usar o formato GIVING: SUBTRACT TAXA FROM 100.00 GIVING LIQUIDO.

  3. Todos os campos e literais antes da palavra FROM serão somados e a soma será subtraída do campo imediatamente posterior a palavra FROM.
    O resultado, ou diferença, será colocado neste mesmo campo, se não for usada a opção GIVING.
    Todos os campos ficarão inalterados.

  4. Ao ser utilizada a opção GIVING, a operação realizada é a mesma da Regra 3, mas o resultado, ou diferença, é colocado no campo imediamente após a palavra GIVING.
    O conteúdo inicial do campo resultante depois da palavra GIVING não faz parte da operação.


Exemplos:
Antes Comando Depois
VALOR-1 VALOR-2 VALOR-3 VALOR-1 VALOR-2 VALOR-3
8 SUBTRACT 3 FROM VALOR-1 5
3 8 SUBTRACT VALOR-1 FROM VALOR-2 3 5
2 6 39 SUBTRACT VALOR-1 FROM VALOR-2 GIVING VALOR-3 2 6 4
6 -7 SUBTRACT VALOR-1 FROM VALOR-2 6 -13
-6 -7 SUBTRACT VALOR-1 FROM VALOR-2 -6 -1
-6 7 SUBTRACT VALOR-1 FROM VALOR-2 -6 13
80 20 SUBTRACT 50 FROM VALOR-1 GIVING VALOR-2 80 30
30 20 40 SUBTRACT 60 VALOR-1 VALOR-2 FROM VALOR-3 30 20 -70