このドキュメントでは、次のトピックについて説明します。
関連ステートメント:COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT
関連機能グループ:「算術演算とデータ移動操作」
ADD
ステートメントを使用して、複数のオペランドを追加します。
注意:
ADD
ステートメント実行時、算術演算に使用される各オペランドは、有効な値を持っている必要があります。
このステートメントには、2 つの異なる構造が可能です。
構文図で使用されている記号については、「構文記号」を参照してください。
ADD [ROUNDED ] operand1 TO operand2 |
オペランド定義テーブル(構文 1):
オペランド | 構文要素 | フォーマット | ステートメント参照 | ダイナミック定義 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | N | N | P | I | F | D | T | 可 | 不可 | |||||||||
operand2 | S | A | M | N | P | I | F | D | T | 可 | 可 |
構文要素の説明:
operand1 | operand1 は加数です。 |
---|---|
ROUNDED | キーワード ROUNDED を使用すると、結果が四捨五入されます。 四捨五入のルールについては、「演算割り当てのルール」を参照してください。
|
TO operand2 | operand2 は加算に含められ、演算結果を受け取ります。
|
例:
ステートメント
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 ] operand1 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 | 可 | 可 |
*operand3 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明:
operand1 | operand1 は加数です。 |
---|---|
ROUNDED | キーワード ROUNDED を使用すると、結果が四捨五入されます。 四捨五入のルールについては、「演算割り当てのルール」を参照してください。
|
GIVING operand2 | operand2 は演算結果を受け取るのみで、加算の対象にはなりません。
|
注意:
構文 2 を使用する場合、次のことが適用されます。キーワード GIVING
の左側の (operand1
) フィールドのみが加算の項であり、キーワード GIVING
(operand2
) の右側のフィールドは結果値を受け取るために使用されるだけです。 単一の (operand1
) フィールドのみが指定されている場合、ADD
演算は割り当てに変わります。
例:
ステートメント
ADD #S GIVING #R
is equivalent toCOMPUTE #R := #S
ADD #S #T GIVING #R
is equivalent toCOMPUTE #R := #S + #T
ADD #A(*) 0 GIVING #R
is equivalent toCOMPUTE #R := #A(*) + 0
which is a legal operation, due to the rules defined in Arithmetic Operations with ArraysADD #A(*) GIVING #R
is equivalent toCOMPUTE #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