COBOL - Coding your program - Examples: numeric intrinsic functions



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

COBOL - Codificando seu programa - Exemplos: funções intrínsecas numéricas
Enterprise COBOL for z/OS, Version 4.2

Os exemplos a seguir e as explicações que os acompanham mostram funções intrínsecas em cada uma das várias categorias.

Onde os exemplos abaixo mostram itens de dados decimais zoneados, itens decimais nacionais podem ser usados.
(Itens decimais nacionais assinados, no entanto, exigem que a cláusula SIGN SEPARATE esteja em vigor.)

Tratamento geral de números

Suponha que você queira encontrar o valor máximo de dois preços (representados abaixo como itens alfanuméricos com cifrões), coloque esse valor em um campo numérico em um registro de saída e determine o comprimento do registro de saída.
Você pode usar NUMVAL-C (uma função que retorna o valor numérico de um literal alfanumérico ou nacional, ou um item de dados alfanumérico ou nacional) e as funções MAX e LENGTH para fazer isso:

01  X                   PIC 9(2).
01  PRICE1              PIC X(8)   VALUE "$8000".
01  PRICE2              PIC X(8)   VALUE "$2000".
01  OUTPUT-RECORD.
    05  PRODUCT-NAME    PIC X(20).
    05  PRODUCT-NUMBER  PIC 9(9).
    05  PRODUCT-PRICE   PIC 9(6).
. . .
PROCEDURE DIVISION.
    COMPUTE PRODUCT-PRICE =
      FUNCTION MAX (FUNCTION NUMVAL-C(PRICE1) FUNCTION NUMVAL-C(PRICE2))
    COMPUTE X = FUNCTION LENGTH(OUTPUT-RECORD)

Além disso, para garantir que o conteúdo em PRODUCT-NAME esteja em letras maiúsculas, você pode usar a seguinte declaração:

MOVE FUNCTION UPPER-CASE (PRODUCT-NAME) TO PRODUCT-NAME

Data e hora

O exemplo a seguir mostra como calcular uma data de vencimento que é 90 dias a partir de hoje.
Os primeiros oito caracteres retornados pela funçãoCURRENT-DATE representam a data em um formato de ano de quatro dígitos, mês de dois dígitos e dia de dois dígitos (AAAAMMDD).
A data é convertida em seu valor inteiro; então 90 é adicionado a este valor e o inteiro é convertido de volta para o formato AAAAMMDD.

01  YYYYMMDD         PIC 9(8).
01  INTEGER-FORM     PIC S9(9).
. . .
    MOVE FUNCTION CURRENT-DATE(1:8) TO YYYYMMDD
    COMPUTE INTEGER-FORM = FUNCTION INTEGER-OF-DATE(YYYYMMDD)
    ADD 90 TO INTEGER-FORM
    COMPUTE YYYYMMDD = FUNCTION DATE-OF-INTEGER(INTEGER-FORM)
    DISPLAY 'Due date: ' YYYYMMDD

Finança

As decisões de investimento empresarial freqüentemente requerem o cálculo do valor presente dos fluxos de caixa futuros esperados para avaliar a lucratividade de um investimento planejado.
O valor presente de uma quantia que você espera receber em um determinado momento no futuro é aquela quantia que, se investida hoje a uma determinada taxa de juros, acumularia para aquela quantia futura.

Por exemplo, suponha que um investimento proposto de $ 1.000 produza um fluxo de pagamento de $ 100, $ 200 e $ 300 nos próximos três anos, um pagamento por ano, respectivamente.
As seguintes declarações COBOL calculam o valor presente dessas entradas de caixa a uma taxa de juros de 10%:

01  SERIES-AMT1      PIC 9(9)V99       VALUE 100.
01  SERIES-AMT2      PIC 9(9)V99       VALUE 200.
01  SERIES-AMT3      PIC 9(9)V99       VALUE 300.
01  DISCOUNT-RATE    PIC S9(2)V9(6)    VALUE .10.
01  TODAYS-VALUE     PIC 9(9)V99.
. . .
    COMPUTE TODAYS-VALUE =
      FUNCTION
        PRESENT-VALUE(DISCOUNT-RATE SERIES-AMT1 SERIES-AMT2 SERIES-AMT3)

Você pode usar a função ANUIDADE em problemas de negócios que exigem que você determine o valor de um pagamento em prestações (anuidade) necessário para pagar o principal e os juros de um empréstimo.
A série de pagamentos é caracterizada por um valor igual em cada período, períodos de igual duração e uma taxa de juros igual em cada período.
O exemplo a seguir mostra como você pode calcular o pagamento mensal necessário para pagar um empréstimo de $ 15.000 em três anos a uma taxa de juros anual de 12% (36 pagamentos mensais, juros por mês = 0,12 / 12):

01  LOAN             PIC 9(9)V99.
01  PAYMENT          PIC 9(9)V99.
01  INTEREST         PIC 9(9)V99.
01  NUMBER-PERIODS   PIC 99.
. . .
    COMPUTE LOAN = 15000
    COMPUTE INTEREST = .12
    COMPUTE NUMBER-PERIODS = 36
    COMPUTE PAYMENT =
      LOAN * FUNCTION ANNUITY((INTEREST / 12) NUMBER-PERIODS)

Matemática

A seguinte instrução COBOL demonstra que você pode aninhar funções intrínsecas, usar expressões aritméticas como argumentos e realizar cálculos anteriormente complexos de forma simples:

COMPUTE Z = FUNCTION LOG(FUNCTION SQRT (2 * X + 1)) + FUNCTION REM(X 2)

Aqui no adendo, a função intrínseca REM (em vez de uma instrução DIVIDE com uma cláusula REMAINDER) retorna o restante de dividingX por 2.

Estatisticas

As funções intrínsecas facilitam o cálculo das informações estatísticas.
Suponha que você esteja analisando vários impostos municipais e deseja calcular a média, a mediana e o intervalo (a diferença entre os impostos máximos e mínimos):

01  TAX-S            PIC 99V999 VALUE .045.
01  TAX-T            PIC 99V999 VALUE .02.
01  TAX-W            PIC 99V999 VALUE .035.
01  TAX-B            PIC 99V999 VALUE .03.
01  AVE-TAX          PIC 99V999.
01  MEDIAN-TAX       PIC 99V999.
01  TAX-RANGE        PIC 99V999.
. . .
    COMPUTE AVE-TAX    = FUNCTION MEAN   (TAX-S TAX-T TAX-W TAX-B)
    COMPUTE MEDIAN-TAX = FUNCTION MEDIAN (TAX-S TAX-T TAX-W TAX-B)
    COMPUTE TAX-RANGE  = FUNCTION RANGE  (TAX-S TAX-T TAX-W TAX-B)

Tarefas relacionadas



© Copyright IBM Corp.