This document discusses arithmetic statements that are used for computing data:
In addition, the following statements are discussed which are used to transfer the value of an operand into one or more fields:
Important:
For optimum processing,
user-defined variables used in
arithmetic statements should be defined with format P (packed
numeric).
The following topics are covered:
The COMPUTE
statement is used to
perform arithmetic operations. The following connecting operators are
available:
**
|
Exponentiation |
---|---|
*
|
Multiplication |
/
|
Division |
+
|
Addition |
-
|
Subtraction |
( )
|
Parentheses may be used to indicate logical grouping. |
COMPUTE LEAVE-DUE = LEAVE-DUE * 1.1
In this example, the value of the field LEAVE-DUE
is
multiplied by 1.1, and the result is placed in the field
LEAVE-DUE
.
COMPUTE #A = SQRT (#B)
In this example, the square root of the value of the field
#B
is evaluated, and the result is assigned to the field
#A
.
SQRT
is a mathematical function supported in the
following arithmetic statements:
For an overview of mathematical functions, see Mathematical Functions below.
COMPUTE #INCOME = BONUS (1,1) + SALARY (1)
In this example, the first bonus of the current year and the current
salary amount are added and assigned to the field #INCOME
.
The statements MOVE
and
COMPUTE
can be used
to transfer the value of an operand into one or more fields. The operand may be
a constant such as a text item or a number, a database field, a user-defined
variable, a system variable, or, in certain cases, a system function.
The difference between the two statements is that in the
MOVE
statement the value to be moved is specified on the left; in
the COMPUTE
statement the value to be assigned is specified on the
right, as shown in the following examples.
MOVE NAME TO #LAST-NAME COMPUTE #LAST-NAME = NAME
The ADD
,
SUBTRACT
,
MULTIPLY
and
DIVIDE
statements are
used to perform arithmetic operations.
ADD +5 -2 -1 GIVING #A SUBTRACT 6 FROM 11 GIVING #B MULTIPLY 3 BY 4 GIVING #C DIVIDE 3 INTO #D GIVING #E
All four statements have a
ROUNDED
option, which you can use if you wish the result of the operation to be
rounded.
For rules on rounding, see Rules for Arithmetic Assignment.
The Statements documentation provides more detailed information on these statements.
The following program demonstrates the use of user-defined variables in arithmetic statements. It calculates the ages and wages of three employees and outputs these.
** Example 'COMPUX01': COMPUTE ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 JOB-TITLE 2 SALARY (1:1) 2 BONUS (1:1,1:1) * 1 #DATE (N8) 1 REDEFINE #DATE 2 #YEAR (N4) 2 #MONTH (N2) 2 #DAY (N2) 1 #BIRTH-YEAR (A4) 1 REDEFINE #BIRTH-YEAR 2 #BIRTH-YEAR-N (N4) 1 #AGE (N3) 1 #INCOME (P9) END-DEFINE * MOVE *DATN TO #DATE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE EDITED BIRTH (EM=YYYY) TO #BIRTH-YEAR SUBTRACT #BIRTH-YEAR-N FROM #YEAR GIVING #AGE /* COMPUTE #INCOME = BONUS (1:1,1:1) + SALARY (1:1) /* DISPLAY NAME 'POSITION' JOB-TITLE #AGE #INCOME END-READ END
Output of Program COMPUX01
:
Page 1 14-01-14 14:15:54 NAME POSITION #AGE #INCOME -------------------- ------------------------- ---- ---------- JONES MANAGER 63 55000 JONES DIRECTOR 58 50000 JONES PROGRAMMER 48 31000
The COMPRESS
statement is used to
transfer (combine) the contents of two or more operands into a single
alphanumeric field.
Leading zeros in a numeric field and trailing blanks in an alphanumeric field are suppressed before the field value is moved to the receiving field.
By default, the transferred values are separated from one another by
a single blank in the receiving field. For other separating possibilities, see
the COMPRESS
statement option
LEAVING NO
SPACE
(in the Statements
documentation).
COMPRESS 'NAME:' FIRST-NAME #LAST-NAME INTO #FULLNAME
In this example, a COMPRESS
statement is used to
combine a text constant ('NAME:'
), a database field
(FIRST-NAME
) and a user-defined variable (#LAST-NAME
)
into one user-defined variable (#FULLNAME
).
For further information on the COMPRESS
statement,
please refer to the COMPRESS
statement description
(in the Statements documentation).
The following program illustrates the use of the statements
MOVE
and
COMPRESS
.
** Example 'COMPRX01': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 MIDDLE-I * 1 #LAST-NAME (A15) 1 #FULL-NAME (A30) END-DEFINE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE NAME TO #LAST-NAME /* COMPRESS 'NAME:' FIRST-NAME MIDDLE-I #LAST-NAME INTO #FULL-NAME /* DISPLAY #FULL-NAME (UC==) FIRST-NAME 'I' MIDDLE-I (AL=1) NAME END-READ END
Output of Program COMPRX01
:
Notice the output format of the compressed field.
Page 1 14-01-14 14:15:54 #FULL-NAME FIRST-NAME I NAME ============================== -------------------- - -------------------- NAME: VIRGINIA J JONES VIRGINIA J JONES NAME: MARSHA JONES MARSHA JONES NAME: ROBERT B JONES ROBERT B JONES
In multiple-line displays, it may be useful to combine fields/text
in a user-defined variable by using
a COMPRESS
statement.
In the following program, three user-defined variables are used:
#FULL-SALARY
, #FULL-NAME
, and
#FULL-CITY
. #FULL-SALARY
, for example, contains the
text 'SALARY:'
and the database fields SALARY
and
CURR-CODE
. The WRITE
statement then references
only the compressed variables.
** Example 'COMPRX02': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 SALARY (1:1) 2 CURR-CODE (1:1) 2 CITY 2 ADDRESS-LINE (1:1) 2 ZIP * 1 #FULL-SALARY (A25) 1 #FULL-NAME (A25) 1 #FULL-CITY (A25) END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK' COMPRESS 'SALARY:' CURR-CODE(1) SALARY(1) INTO #FULL-SALARY COMPRESS FIRST-NAME NAME INTO #FULL-NAME COMPRESS ZIP CITY INTO #FULL-CITY /* DISPLAY 'NAME AND ADDRESS' NAME (EM=X^X^X^X^X^X^X^X^X^X^X^X) WRITE 1/5 #FULL-NAME 1/37 #FULL-SALARY 2/5 ADDRESS-LINE (1) 3/5 #FULL-CITY SKIP 1 END-READ END
Output of Program COMPRX02
:
Page 1 14-01-14 14:15:54 NAME AND ADDRESS ----------------------- R U B I N SYLVIA RUBIN SALARY: USD 17000 2003 SARAZEN PLACE 10036 NEW YORK W A L L A C E MARY WALLACE SALARY: USD 38000 12248 LAUREL GLADE C 10036 NEW YORK K E L L O G G HENRIETTA KELLOGG SALARY: USD 52000 1001 JEFF RYAN DR. 19711 NEWARK
The following Natural mathematical functions are supported in
arithmetic processing statements (ADD
,
COMPUTE
,
DIVIDE
,
SUBTRACT
,
MULTIPLY
).
Mathematical Function | Natural System Function |
---|---|
Absolute value of
field .
|
ABS(field)
|
Arc tangent of
field .
|
ATN(field)
|
Cosine of
field .
|
COS(field)
|
Exponential of
field .
|
EXP(field)
|
Fractional part of
field .
|
FRAC(field)
|
Integer part of
field .
|
INT(field)
|
Natural logarithm of
field .
|
LOG(field)
|
Sign of
field .
|
SGN(field)
|
Sine of
field .
|
SIN(field)
|
Square root of
field .
|
SQRT(field)
|
Tangent of
field .
|
TAN(field)
|
Numeric value of an alphanumeric
field .
|
VAL(field)
|
See also the System Functions documentation for a detailed explanation of each mathematical function.
See the following example programs: