このドキュメントでは、次のトピックについて説明します。
関連ステートメント:COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT
関連機能グループ:算術演算とデータ移動操作
ADD ステートメントを使用して、複数のオペランドを追加します。
このステートメントには、2 つの異なる構文構造があります。
注意:
ADD ステートメント実行時、算術演算に使用される各オペランドは、有効な値を持っている必要があります。
ADD [ROUNDED] |
|
|
TO operand2 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル(構文 1):
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | A | N | N | P | I | F | D | T | ○ | × | |||||||||
operand2 |
S | A | M | N | P | I | F | D | T | ○ | ○ | ||||||||||
構文要素の説明:
| 構文要素 | 説明: |
|---|---|
arithmetic-expression |
COMPUTE ステートメントの「算術演算式」も参照してください。
|
operand1 TO
operand2 |
オペランド:
operand2 := operand2 + operand1 + ... |
ROUNDED |
ROUNDED オプション:
キーワード 四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。 |
例:
ステートメント
ADD #A(*) TO #B(*)is equivalent toCOMPUTE #B(*) := #A(*) + #B(*)ADD #S TO #Ris equivalent toCOMPUTE #R := #S + #RADD #S #T TO #Ris equivalent toCOMPUTE #R := #S + #T + #RADD #A(*) TO #Ris equivalent toCOMPUTE #R := #A(*) + #R
ADD [ROUNDED] |
|
|
GIVINGoperand2 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル(構文 2):
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | A | N | N | P | I | F | D | T | ○ | × | ||||||||
operand2 |
S | A | M | A | U | N | P | I | F | B * | D | T | ○ | ○ | ||||||
* operand2 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明:
| 構文要素 | 説明: |
|---|---|
arithmetic-expression |
COMPUTE ステートメントの「算術演算式」も参照してください。
|
operand1 GIVING
operand2 |
オペランド:
operand2 := operand1 + ... |
ROUNDED |
ROUNDED オプション:
キーワード 四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。 |
注意:
構文 2 を使用する場合、次のことが該当します。キーワード GIVING の左側の(operand1)フィールドのみが加算の項であり、キーワード GIVING の右側のフィールド(operand2)は結果値を受け取るために使用されるだけです。単一の(operand1)フィールドのみが指定されている場合、ADD 演算は割り当てに変わります。
例:
ステートメント
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>
END-DEFINE
*
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: 2005-01-10 CURRENT DATE + 7: 2005-01-17
#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