Examples: numeric intrinsic functions
The following examples and accompanying explanations show intrinsic functions in each of several categories.
Where the examples below show zoned decimal
data items, national decimal items could instead be used. (Signed
national decimal items, however, require that the SIGN SEPARATE
clause
be in effect.)
General number handling
Suppose
you want to find the maximum value of two prices (represented below
as alphanumeric items with dollar signs), put this value into a numeric
field in an output record, and determine the length of the output
record. You can use NUMVAL-C
(a function that returns
the numeric value of an alphanumeric or national literal,
or an alphanumeric or national data item) and the MAX
and LENGTH
functions
to do so:
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)
Additionally, to ensure that the contents in Product-Name
are
in uppercase letters, you can use the following statement:
Move Function Upper-case (Product-Name) to Product-Name
Date and time
The
following example shows how to calculate a due date that is 90 days
from today. The first eight characters returned by the CURRENT-DATE
function
represent the date in a four-digit year, two-digit month, and two-digit
day format (YYYYMMDD
). The date is converted to its
integer value; then 90 is added to this value and the integer is converted
back to the YYYYMMDD
format.
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
Finance
Business investment decisions frequently require computing the present value of expected future cash inflows to evaluate the profitability of a planned investment. The present value of an amount that you expect to receive at a given time in the future is that amount, which, if invested today at a given interest rate, would accumulate to that future amount.
For example, assume that a proposed investment of $1,000 produces a payment stream of $100, $200, and $300 over the next three years, one payment per year respectively. The following COBOL statements calculate the present value of those cash inflows at a 10% interest rate:
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)
You
can use the ANNUITY
function in business problems
that require you to determine the amount of an installment payment
(annuity) necessary to repay the principal and interest of a loan.
The series of payments is characterized by an equal amount each period,
periods of equal length, and an equal interest rate each period. The
following example shows how you can calculate the monthly payment
required to repay a $15,000 loan in three years at a 12% annual interest
rate (36 monthly payments, interest per month = .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)
Mathematics
The following COBOL statement demonstrates that you can nest intrinsic functions, use arithmetic expressions as arguments, and perform previously complex calculations simply:
Compute Z = Function Log(Function Sqrt (2 * X + 1)) + Function Rem(X 2)
Here in the addend the intrinsic function REM
(instead
of a DIVIDE
statement with a REMAINDER
clause)
returns the remainder of dividing X
by 2.
Statistics
Intrinsic functions make calculating statistical information easier. Assume you are analyzing various city taxes and want to calculate the mean, median, and range (the difference between the maximum and minimum taxes):
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)