COBOL言語で計算処理をするなら「COMPUTE文」 | 用語辞典

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

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

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

COBOLでは、計算処理を行う場合はCOMPUTE文で計算式を用いて計算を行う処理と、四則演算の命令文を用いて、値が設定されているデータ項目に対して計算する処理があります。

本記事では、COBOLにおけるCOMPUTE文について基本的な使い方やルール、注意点などをご紹介します。

COMPUTE文はCOBOLを扱う上で基本的な処理となりますので、使い方をしっかりと覚えておきましょう。

書き方1:
COMPUTE [結果保存用データ項目] = [計算式].

書き方2:
COMPUTE [結果保存用データ項目] ROUNDED = [計算式]
ON SIZE ERROR 無条件文
NOT ON SIZE ERROR 無条件文
END-COMPUTE.

計算式で使用可能な記号:
辞典・辞書-COMPUTE-記号一覧

使用例:
計算を行う命令文はADD文(加算)、SUBTRACT文(減算)、MULTIPLY文(乗算)、DIVIDE文(除算)がありますが、COMPUTE文は計算式を用いて複雑な計算を一度に処理したい場合に使用します。
以下にCOMPUTE文を使用して、簡単な四則演算を行うサンプルプログラムを紹介します。
辞典・辞書-COMPUTE-使用例1

実行結果:
辞典・辞書-COMPUTE-実行結果1

サンプルでは、COMPUTE文を用いて値を設定したデータ項目に対して、四則演算をそれぞれ行い、結果保存用データ項目WORK-SUMに計算結果を格納しています。

最後に実施している加算・除算処理のように、COMPUTE文を使用すれば一度に複数の計算処理が可能なことがわかります。

なお、単純な計算を行う場合は、ADD文やSUBTRACT文のような四則演算の命令文を使用したほうが、処理が明確になることもありますので、COMPUTE文とうまく使い分けるようにしましょう。

COMPUTE文のCOBOL(コボル)言語におけるルール

1.COMPUTE、ROUNDED、データ項目などの各要素間の改行有無は自由に設定できます。

2.COMPUTE文は右辺の計算式の結果が、左辺の結果保存用データ項目に保存されます。

3.ROUNDEDを指定すると、計算結果が四捨五入されます。四捨五入は指定した有効桁数未満で行います。

4.計算結果が結果保存項目の桁数を超える(オーバーフロー)場合は、ON SIZE ERRORに記述された無条件文が実行されます。

5.計算結果が結果保存項目の桁数の範囲内の場合は、NOT ON SIZE ERRORに記述された無条件文が実行されます。

6.COMPUTE文で四則演算をまとめて行うときは、通常の計算と同様にべき乗、乗算、除算を先に計算し、次に加算、減算を行います。

7.先に計算したい式をカッコで括れば、計算式の順番を指定できます。

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

1.ON SIZE ERROR〜NOT ON SIZE ERROR〜END-COMPUTEは、エラー処理を記述するときに使用しますが、通常使用することはありません。

2.通常の計算同様、先に計算したい部分はカッコで括らないと計算結果が変わってしまいますので注意しましょう。
例えば以下のように同じ計算式でもカッコを含む、含まないで計算結果が異なります。

COMPUTE WORK-SUM = 2 * 5 / 5 – 2 * 5 * 2.
DISPLAY “計算結果:”WORK-SUM.
COMPUTE WORK-SUM = 2 * 5 / (5 – 2) * 5 * 2.
DISPLAY “計算結果:”WORK-SUM.
辞典・辞書-COMPUTE-計算結果1

3.COMPUTE文で計算式を記述する場合は、データ項目や定数、演算子は空白で区切らなければいけません。以下のように指定するとコンパイルエラーになります。
辞典・辞書-COMPUTE-エラー例1

COMPUTE文を使ったCOBOLプログラムの活用法

COMPUTE文を使用すれば一度に複数の計算が実行できますが、計算式の結果を四捨五入して小数点以下の値を繰り上げたい場合は、結果保存データ項目の後にROUNDEDを指定します。
以下のサンプルではCOMPUTE文を使用して、円周の長さを求める簡単なサンプルを紹介します。

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. COMPUTE_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. CONFIGURATION SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. 01 WORK-AREA.
  8. 03 WORK-NUM PIC 9(3) VALUE 2.
  9. 03 WORK-PI PIC 9(3)V99999 VALUE 3.14159.
  10. 03 WORK-RADIUS PIC 9(3).
  11. 03 WORK-SUM PIC 9(3).
  12.  
  13. PROCEDURE DIVISION.
  14. MAIN SECTION.
  15. *>値を設定する
  16. MOVE 60 TO WORK-RADIUS.
  17. *>円周の長さを求める
  18. COMPUTE WORK-SUM ROUNDED =
  19. (WORK-NUM * WORK-RADIUS) * WORK-PI.
  20. DISPLAY "円周率の長さ:" WORK-SUM.
  21. STOP RUN.

辞典・辞書-COMPUTE-実行結果2
サンプルでは、2 * 半径 * 円周率で円周の長さを計算しています。円周率は3.14159…と続き、計算結果が小数点を含めた値となりますので、ROUNDEDを使用して小数点以下を四捨五入しています。

そのため、結果保存用データ項目WORK-SUMには小数点を四捨五入して、繰り上げた計算結果377が格納されます。
結果保存用データ項目自体を、PIC 9(3)V99999のように小数点以下まで指定すると、有効少数桁数未満までは四捨五入されませんので注意しましょう。

たとえば、結果保存用データ項目をPIC 9(3)V99999で指定すると、実行結果は376.99080となります。ROUNDEDを指定しても、小数点以下が四捨五入されるわけではありません。

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

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

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

COBOL入門のカテゴリー

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