This document covers the following topics:
Related Statements:
COMPRESS

COMPUTE

DIVIDE

EXAMINE

MOVE

MOVE ALL

MULTIPLY

RESET

SEPARATE

SUBTRACT
Belongs to Function Group: Arithmetic and Data Movement Operations
The ADD
statement is used to add two or more
operands.
This statements has two different syntax structures.
Notes:
ADD
statement
is executed, each operand used in the arithmetic operation must contain a valid
value.
ADD
[ROUNDED ]

TO operand2 
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
Operand Definition Table (Syntax 1):
Operand  Possible Structure  Possible Formats  Referencing Permitted  Dynamic Definition  

operand1 
C  S  A  N  N  P  I  F  D  T  yes  no  
operand2 
S  A  M  N  P  I  F  D  T  yes  yes 
Syntax Element Description:
Syntax Element  Description: 

arithmeticexpression 
See
Arithmetic
Expression in the COMPUTE statement.

operand1 TO
operand2

Operands:
operand2 := operand2 + operand1 + ... 
ROUNDED 
ROUNDED Option:
If the keyword For information on rounding, see Rules for Arithmetic Assignment, Field Truncation and Field Rounding in the Programming Guide. 
Example:
The statement
ADD #A(*) TO #B(*)
is equivalent toCOMPUTE #B(*) := #A(*) + #B(*)
ADD #S TO #R
is equivalent toCOMPUTE #R := #S + #R
ADD #S #T TO #R
is equivalent toCOMPUTE #R := #S + #T + #R
ADD #A(*) TO #R
is equivalent toCOMPUTE #R := #A(*) + #R
ADD
[ROUNDED ]

GIVING
operand2 
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
Operand Definition Table (Syntax 2):
Operand  Possible Structure  Possible Formats  Referencing Permitted  Dynamic Definition  

operand1 
C  S  A  N  N  P  I  F  D  T  yes  no  
operand2 
S  A  M  A  U  N  P  I  F  B*  D  T  yes  yes 
* Format B of operand2
may
be used only with a length of less than or equal to 4.
Syntax Element Description:
Syntax Element  Description: 

arithmeticexpression 
See
Arithmetic
Expression in the COMPUTE statement.

operand1 GIVING
operand2 
Operands:
operand2 := operand1 + ... 
ROUNDED 
ROUNDED Option:
If the keyword For information on rounding, see Rules for Arithmetic Assignment, Field Truncation and Field Rounding in the Programming Guide. 
Note:
If Syntax 2 is used, the following applies: Only the
(operand1
) field(s) left of the keyword
GIVING
are the terms of the addition, the field right of the
keyword GIVING
(operand2
)
is just used to receive the result value. If just a single
(operand1
) field is supplied, the
ADD
operation turns into an assignment.
Example:
The statement
ADD #S GIVING #R is equivalent to COMPUTE #R := #S ADD #S #T GIVING #R is equivalent to COMPUTE #R := #S + #T ADD #A(*) 0 GIVING #R is equivalent to COMPUTE #R := #A(*) + 0 which is a legal operation, due to the rules defined in Arithmetic Operations with Arrays ADD #A(*) GIVING #R is equivalent to COMPUTE #R := #A(*) which is an illegal operation, due to the rules defined in Assignment Operations with Arrays
** Example 'ADDEX1': ADD ************************************************************************ DEFINE DATA LOCAL 1 #A (P2) 1 #B (P1.1) 1 #C (P1) 1 #DATE (D) 1 #ARRAY1 (P5/1:4,1:4) INIT (2,*) <5> 1 #ARRAY2 (P5/1:4,1:4) INIT (4,*) <10> ENDDEFINE * ADD +5 2 1 GIVING #A WRITE NOTITLE 'ADD +5 2 1 GIVING #A' 15X '=' #A * ADD .231 3.6 GIVING #B WRITE / 'ADD .231 3.6 GIVING #B' 15X '=' #B * ADD ROUNDED 2.9 3.8 GIVING #C WRITE / 'ADD ROUNDED 2.9 3.8 GIVING #C' 8X '=' #C * MOVE *DATX TO #DATE ADD 7 TO #DATE WRITE / 'CURRENT DATE:' *DATX (DF=L) 13X 'CURRENT DATE + 7:' #DATE (DF=L) * WRITE / '#ARRAY1 AND #ARRAY2 BEFORE ADDITION' / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*) ADD #ARRAY1 (2,*) TO #ARRAY2 (4,*) WRITE / '#ARRAY1 AND #ARRAY2 AFTER ADDITION' / '=' #ARRAY1 (2,*) '=' #ARRAY2 (4,*) * END
ADD +5 2 1 GIVING #A #A: 2 ADD .231 3.6 GIVING #B #B: 3.8 ADD ROUNDED 2.9 3.8 GIVING #C #C: 7 CURRENT DATE: 20050110 CURRENT DATE + 7: 20050117 #ARRAY1 AND #ARRAY2 BEFORE ADDITION #ARRAY1: 5 5 5 5 #ARRAY2: 10 10 10 10 #ARRAY1 AND #ARRAY2 AFTER ADDITION #ARRAY1: 5 5 5 5 #ARRAY2: 15 15 15 15