出番が少ない「SUBTRACT文」はCOBOL言語の減算処理文です | 用語辞典

COBOL(コボル)言語の予約語SUBTRACT文を使った命令文の書き方とは

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

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

COBOL(コボル)には、演算処理時に単純に計算式を用いて計算処理を行う方法と、演算用の命令文を用いて計算処理を行う方法があります。

データ項目の値に対して、指定した値を加算するときにはADD文を使用し、指定した値を減算するときにはSUBTRACT文を使用します。

COBOLでは四則演算の減算(SUBTRACT)・乗算(MULTPLY)・除算(DIVIDE)は、使用する頻度が低い演算です。演算処理を行うには、一般的にCOMPUTE文を使用したほうが、文法的に誤解を生じにくいと言えます。

本記事では、COBOLにおける四則演算のうち、SUBTRACT文について基本的な使い方やルール、注意点などをご紹介します。

書き方1:

以下の書き方は、減算対象項目から減算する項目を減算して、減算対象項目に代入する方法です。

SUBTRACT [減算する項目1] [減算する項目2]… FROM [減算対象項目1] [減算対象項目2]…

書き方2:(四捨五入する場合)

減算結果を四捨五入して格納するためには、ROUNDEDを指定します。

SUBTRACT [減算する項目1] [減算する項目2]… FROM [減算対象項目1] ROUNDED

[減算対象項目2] ROUNDED…

書き方3:(指定した項目に保存する場合)

減算結果を指定したデータ項目に格納するためには、GIVING句を指定します。GIVING句を指定すると、減算結果は減算結果格納項目に格納されます。

SUBTRACT [減算する項目1] [減算する項目2]… FROM [減算対象項目] GIVING

[減算結果格納項目]
以下にSUBTRACT文を使用して、減算処理を実行する簡単なプログラムを紹介します。

辞典・辞書-SUBTRACT-プログラム

実行結果:
辞典・辞書-SUBTRACT-実行結果:

サンプルでは減算する項目WORK-NUMと、減算対象項目にWORK-SUMを設定し、SUBTRACT文で減算処理を実行しています。

サンプルで実行している「SUBTRACT WORK-NUM FROM WORK-SUM.」は、以下のように処理を実行しています。

WORK-SUM = WORK-SUM - WORK-NUM

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

  1. SUBTRACT、減算する項目、FROM、減算対象項目の各要素間の空白や改行有無は自由に設定できます。
  2. 減算した結果は、減算対象項目に格納されます。
  3. 減算対象項目にROUNDEDを使用すると、減算の結果が四捨五入されます。
  4. 減算する項目は、複数指定した場合はすべてを加算した結果を減算対象項目から減算します。
  5. 減算対象項目を複数指定した場合は減算対象項目1、減算対象項目2にそれぞれ減算結果が格納されます。
  6. GIVING句を指定すると、減算結果を格納する場所の指定をしたデータ項目に、減算結果が格納されます。GIVING句を指定した場合は、減算対象項目には内容が格納されません。

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

  1. 指定するデータ項目は減算する項目、減算対象項目ともに数値でなければいけません。

以下のようにデータ項目にXを指定すると、コンパイルエラーが発生しますので注意しましょう。

辞典・辞書-SUBTRACT-エラー例1

※データ項目にXを指定するとコンパイルエラーが発生します。

辞典・辞書-SUBTRACT-エラー例2

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

活用法として減算する項目を複数指定し、ROUNDEDによる四捨五入及びGIVINGによる指定したデータ項目へ保存する簡単なサンプルを、以下に紹介します。

   
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. SUBTRACT_SAMPLE02.
  3.  
  4. ENVIRONMENT DIVISION.
  5. CONFIGURATION SECTION.
  6. DATA DIVISION.
  7.    WORKING-STORAGE SECTION.
  8. 01 TEST-WORK-AREA.
  9. 03 WORK-NUM-1 PIC 9(03)V99.
  10. 03 WORK-NUM-2 PIC 9(03)V99.
  11. 03 WORK-SUM-1 PIC 9(03).
  12. 03 WORK-SUM-2 PIC 9(03).
  13.  
  14. PROCEDURE DIVISION.
  15.    MAIN SECTION.
  16.  
  17. MOVE 3.3 TO WORK-NUM-1.
  18. MOVE 3.4 TO WORK-NUM-2.
  19.  
  20. MOVE 10 TO WORK-SUM-1.
  21.  
  22. *>減算処理を実行
  23. SUBTRACT WORK-NUM-1 WORK-NUM-2 FROM WORK-SUM-1
  24. GIVING WORK-SUM-2 ROUNDED.
  25.  
  26. *>GIVINGを指定しているので減算結果が更新されない
  27. DISPLAY "WORK-SUM-1 : "WORK-SUM-1.
  28.  
  29. *>ROUNDEDを指定しているので四捨五入された減算結果となる
  30. DISPLAY "WORK-SUM-2 : "WORK-SUM-2.
  31.  
  32. STOP RUN.

実行結果:

辞典・辞書-SUBTRACT-実行結果:

サンプルでは小数点を含んだ減算する項目WORK-NUM-1、WORK-NUM-2を指定し、減算対象項目にWORK-SUM-1、減算結果項目にWORK-SUM-2を設定して、SUBTRACT文で減算処理を実行しています。

SUBTRACT文では減算する項目を複数指定しているため、減算する項目同士で加算された値をWORK-SUM1で減算し、GIVINGで指定された結果格納用項目であるWORK-SUM-2に四捨五入された減算結果が格納されています。

実行結果のとおり、ROUNDEDを指定しているので四捨五入した計算結果となります。また、前述したようにGIVINGを指定しているので減算対象項目には減算結果は格納されません。

サンプルで紹介しているSUBTRACT文を通常の計算式に当てはめると、以下のようになります。

{WORK-SUM-1 - (WORK-NUM-1 + WORK-NUM-2)}(四捨五入) = WORK-SUM-2

{10 - (3.3 + 3.4)} = 3

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

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

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

COBOL入門のカテゴリー

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