このドキュメントでは、次のトピックについて説明します。
関連ステートメント: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 #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 |
構文図で使用されている記号については、「構文記号」を参照してください。
オペランド定義テーブル(構文 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