COBOL言語の加算処理の基本を伝授! 命令文「ADD」とは? | 用語辞典

COBOL(コボル)言語の予約語ADDを使った計算処理の仕方とは

辞典・辞書-ADD-イメージ

COBOL(コボル)言語で使用する計算処理の種類

COBOL(コボル)言語の計算処理は、大きく分けて2種類あります。

1つ目は、簡単な四則演算を行なう計算処理で「減算処理のSUBTRACT文」、「除算処理のDIVIDE文」、「乗算処理のMULTIPLY文」、そして今回ご紹介する「加算処理のADD文」の4つからなります。

そして2つ目は、総合的な計算処理を単独で処理することのできるCOMPUTE文です。COBOL(コボル)言語では基本的にこの2種類のどちらかを使って計算処理を行います。

COBOL(コボル)言語のADD文とは?

計算処理の種類でも少しあげましたが、COBOL(コボル)言語のADD文は、追加する・加算するという意味を持つ命令文で、2つ以上の対象(一意名や数値)を指定し、加算(足し算)処理を行ないます。ADD文は加算処理用の命令文です。

書き方1: (通常の加算)
・ADD 一意名A TO 一意名B (データ項目とデータ項目を加算する)
・ADD 加算定数 TO 一意名C (一意名Cに指定した数値を加算する)

使用例1:
・ADD NUMERICAL-DATA-A  TO NUMERICAL-DATA-B
(NUMERICAL-DATA-AとBを加算して、Bに格納します。)
・ADD 1000    TO NUMERICAL-DATA-C
(数値1000をNUMERICAL-DATA-Cに加算します。)

※上記では、2つのデータ項目または数値の加算をしていますが、複数の加算処理も可能です。
(例えば、一意名A 一意名B 一意名C 一意名D TO 一意名E というADD文があった場合、E=A+B+C+D+Eとなります。)

書き方2: (GIVING指定の加算)
・ADD 一意名A TO 一意名B   GIVING 一意名C
(一意名Aと一意名Bを加算し、一意名Cに格納する。)
・ADD 一意名D TO 加算定数1 GIVING 一意名E
(一意名Dと数値を加算し、一意名Eに格納する。)
・ADD 加算定数2 TO 加算定数3 GIVING 一意名F
(指定した数値を全て加算し、一意名Fに格納する。)

使用例2:
・ADD PRICE-DATA01 PRICE-DATA02 GIVING TOTAL-PRICE (料金データを全て加算し、TOTAL-PRICEに格納する。)
・ADD 1000 PRICE-DATA03 GIVING TOTAL-PRICE (数値と数値項目を加算し、TOTAL-PRICEに格納する。)

※書き方1(通常の加算)との違いは、書き方1は数値データ項目同士を加算した後、TOの後に続くデータ項目へ計算した数値を上書きしていました。しかし、書き方2のGIVINGを指定した加算方法では新たなデータ項目を指定し、そこに格納します。この様に、加算処理に使用する元データ項目(和を求める為に参照した数値)に上書きされては困る場合は、GIVING指定の加算処理を用います。

書き方3: (CORRESPONDING指定の加算)
・ADD CORRESPONDING 一意名A TO 一意名B
※一意名Aと対応する一意名Bの条件のあう項目に、一意名Aの数値を加算し、加算した数値を各対応項目に格納する。

使用例3:
・ADD CORRESPONDING TOTAL-PRICE01 TO TOTAL-PRICE02

※書き方1、書き方2ではデータ項目とデータ項目または、データ項目と数値の加算処理方法を説明しました。書き方3のCORRESPONDING指定の加算は、集団項目内にある基本項目に対して影響を及ぼします。条件の合う全ての基本項目に対して加算処理を行い、対象の基本項目(データ項目)に上書きされます。

COBOL(コボル)言語のADD文-ソースと実行例

辞典・辞書-ADD-実行例1

辞典・辞書-ADD-実行例2

ADD文のCOBOL(コボル)言語における基本事項やルール

1. ADD文に使用できるデータ項目は、基本的に数字項目となります。しかし、書き方2のようなGIVING指定した加算処理に関しては、GIVINGの後に続くデータ項目にのみ数字編集項目(通貨編集用文字を含む項目)を用いることができます。

2. 加算処理は、左にある計算処理から順に処理されていき、その都度計算結果を指定したデータ項目へ格納します。

3. ADD文は基本的に加算するための命令文ですが、-(マイナス)の数値を使うことで減算処理も行うことができます。

4. 書き方3は、対象となる集団項目内の条件に合う基本項目に対して加算処理を行うものです。そのため、指定する一意名は集団項目である必要があります。

5. 書き方3のCORRESPONDINGの指定は、「CORR」と省略して書くこともできます。どちらを記述しても処理は変わりません。

6. 1~3の書き方全てに、「ROUNDED」を指定することができます。これが指定された場合、データ項目で指定した小数点以下の小数部の桁数を超える大きさの結果が算出された時に、本来なら切捨てされるところを、四捨五入して計算します。

一般的な四捨五入と同様に、ROUNDED指定された切り捨て予定の小数部の最上位の値が5以上である場合は、整数の最下位の値が切り上がります。(書き方は「ADD 一意名A TO 一意名B ROUNDED」と計算結果が入る一意名の後ろにセットで記述します。)

7. 1~3の書き方全てに、「ON SIZE ERROR」を指定することができます。これは小数点を揃えて計算処理をした時に、データ項目で指定した最大値を超える計算結果が算出された場合に実行する処理を記述するものです。

最大値を超えた(あふれた)状態を桁あふれといいます。「ON SIZE ERROR」は、この桁あふれを起した時に条件分岐する条件文を記述するためのものです。書き方は「ON SIZE ERROR 無条件文(実行させる内容)」とADD文の後に続けて記述します。

8. 「ON SIZE ERROR」と関連して、「NOT ON SIZE ERROR」で桁あふれで無い時の処理も記述できます。ROUNDEDもあわせて指定した場合、四捨五入の処理後に桁あふれのチェックをし、あふれていれば「ON SIZE ERROR」の無条件文を実行し、あふれていなければ「NOT ON SIZE ERROR」の無条件文に移り処理を実行します。

基本的に、「ON SIZE ERROR」の処理が実行された場合、あふれた計算結果はデータ項目に格納せず計算前のデータを保持します。「ON SIZE ERROR」を指定しないまま、桁あふれが起こった場合は、致命的なエラーとなる可能性もありますので、注意が必要です。

COBOL(コボル)言語のADD文を使う上での注意点

1. ADD文は、数値計算用の命令文ですので、基本的に数値定数のみ使用できます。文字定数や表意定数は扱うことはできません。

2. 書き方2のGIVING指定の加算方法では、用例2のようにTOを抜いて記述することが一般的です。「ADD 一意名A TO 一意名B GIVING 一意名C」と、例のように書いても間違いではありませんが、書き方1とは違いTOの後の処理は特に何も変わらず、ただの加算が行われます。

加算処理の計算結果はGIVINGの後の一意名に格納されますので、書き方1との混同を避けるためにTO無しで記述する方法が用いられています。

3. 書き方3で指定した、集団項目内の条件を満たす対象となる項目は数字項目であり、基本項目である必要があります。もし、集団項目内に条件に合う基本項目が無い場合は実行されません。

また、OCCURS句、REDEFINES句などのオブジェクトを含むデータ項目は対象外となります。(OCCURS句、REDEFINES句が指定されている集団項目内の基本項目も対象外となります。)

ADD文を使ったCOBOL(コボル)プログラムの活用法

COBOL(コボル)言語で加算処理をする命令文のADD文ですが、単純に和を計算するだけでなく、データ項目に固定の数値をプラスする加算処理を作成することで、ループ(繰り返し)文などの回転数カウントやファイルの入出力数のカウントなど、様々な使い方ができます。

そこで今回はADD文でループの回転数を数え処理を分岐させるサンプルをご紹介します。

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. ACCEEPT-SAMPLE03.
  3.  
  4. DATA DIVISION.
  5. WORKING-STORAGE SECTION.
  6. 01 COUNT-AREA.
  7. 03 COUNT-DATA PIC 9(4) VALUE 0.
  8. 03 NUMERICAL-DATA PIC 9(4) VALUE 0.
  9.  
  10. PROCEDURE DIVISION.
  11.  
  12. PERFORM UNTIL COUNT-DATA > 1000
  13. ADD 1 TO COUNT-DATA
  14. EVALUATE COUNT-DATA
  15. WHEN 1
  16. MOVE COUNT-DATA TO NUMERICAL-DATA
  17. DISPLAY NUMERICAL-DATA
  18. WHEN 10
  19. MOVE COUNT-DATA TO NUMERICAL-DATA
  20. DISPLAY NUMERICAL-DATA
  21. WHEN 100
  22. MOVE COUNT-DATA TO NUMERICAL-DATA
  23. DISPLAY NUMERICAL-DATA
  24. WHEN 1000
  25. MOVE COUNT-DATA TO NUMERICAL-DATA
  26. DISPLAY NUMERICAL-DATA
  27. END-EVALUATE
  28. END-PERFORM.
  29.  
  30. STOP-RUN.

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門