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.