本文へスキップ
BecomeCoder

COBOLコース · 第4章 基本の命令 ― MOVE・演算・条件分岐 · レッスン21

COMPUTE文 ― 式でまとめて計算する

ローカル実施

導入

前のレッスンの ADDSUBTRACTMULTIPLYDIVIDE は読みやすい反面、複雑な計算式では何行にも分かれて冗長になります。もっと数式らしく、まとめて書きたいときに使うのが COMPUTE文 です。

説明

COMPUTE文は、多くの言語のように = と算術記号を使って計算式を1行で書けます。

       01  WS-PRICE             PIC 9(6)V99  VALUE 1000.
       01  WS-QTY               PIC 9(3)     VALUE 3.
       01  WS-TAX-RATE          PIC V99      VALUE 0.10.
       01  WS-TOTAL             PIC 9(7)V99.

       PROCEDURE DIVISION.
           COMPUTE WS-TOTAL = WS-PRICE * WS-QTY * (1 + WS-TAX-RATE).
           DISPLAY WS-TOTAL.
      *>  結果: 3300.00(1000 × 3 × 1.10)

COMPUTEで使える演算子は次のとおりです。

演算子意味
+足し算
-引き算
*掛け算
/割り算
**べき乗
( )優先順位の指定

先ほどの ADD ... TO ... GIVING ... を使った計算とCOMPUTE文を見比べてみましょう。

      *> ADD/MULTIPLYを使う場合(複数行に分かれる)
           MULTIPLY WS-PRICE BY WS-QTY GIVING WS-SUBTOTAL.
           COMPUTE WS-TAX = WS-SUBTOTAL * WS-TAX-RATE.
           ADD WS-SUBTOTAL TO WS-TAX GIVING WS-TOTAL.

      *> COMPUTEを使う場合(1行にまとまる)
           COMPUTE WS-TOTAL = WS-PRICE * WS-QTY * (1 + WS-TAX-RATE).

複雑な計算式では圧倒的にCOMPUTE文が読みやすくなります。一方、ADD A TO B(英語の文)は、単純な足し算1つだけをはっきり示したいときには今でもよく使われます。実務のCOBOLコードでは、両方の書き方が状況に応じて使い分けられています。

試すには

3つの商品の小計を足して合計を求め、そこに10%の消費税をかけて税込み合計を出す計算を、COMPUTE文1行で書いてみましょう。カッコの使い方(掛け算より先に足し算をさせる)を意識してみてください。