ADD

このドキュメントでは、次のトピックについて説明します。

関連ステートメント:COMPRESS | COMPUTE | DIVIDE | EXAMINE | MOVE | MOVE ALL | MULTIPLY | RESET | SEPARATE | SUBTRACT

関連機能グループ:算術演算とデータ移動操作


関数

ADD ステートメントを使用して、複数のオペランドを追加します。

このステートメントには、2 つの異なる構文構造があります。

注意:

  1. ADD ステートメント実行時、算術演算に使用される各オペランドは、有効な値を持っている必要があります。
  2. 配列を含む加算については、「配列の算術演算」を参照してください。
  3. オペランドのフォーマットについては、「フォーマット混合式のパフォーマンスについて」を参照してください。

構文 1 - GIVING 節のない ADD ステートメント

ADD [ROUNDED]

../graphics/cbo2.gif

arithmetic-expression
operand1

../graphics/cbc2.gif

../graphics/dot3.gif 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
オペランド:

operand1 および operand2 は被加数です。結果は operand2(結果フィールド)に保存されます。したがって、このステートメントは次と同等です。

operand2 := operand2 + operand1 + ...
ROUNDED
ROUNDED オプション:

キーワード ROUNDED を使用すると、結果が四捨五入されます。

四捨五入の詳細については、『プログラミングガイド』の「演算割り当てのルール」、および「フィールドの切り捨てと切り上げ」を参照してください。

例:

ステートメント

ADD #A(*) TO #B(*)  is equivalent to  COMPUTE #B(*) := #A(*) + #B(*)
ADD #S    TO #R     is equivalent to  COMPUTE #R    := #S + #R 
ADD #S #T TO #R     is equivalent to  COMPUTE #R    := #S + #T + #R
ADD #A(*) TO #R     is equivalent to  COMPUTE #R    := #A(*) + #R

構文 2 - ADD ステートメント(GIVING 節を含む場合)

ADD [ROUNDED]

../graphics/cbo2.gif

arithmetic-expression
operand1

../graphics/cbc2.gif

../graphics/dot3.gif 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
オペランド:

operand1 は被加数です。operand2 は演算結果を受け取るためにのみ使用されます。加算には含められません。したがって、このステートメントは次と同等です。

operand2 := operand1 + ...
ROUNDED
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

プログラム ADDEX1 の出力:

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