COBOLのCOMPUTE文と算術演算子の基本を完全ガイド!初心者でもわかる数値計算の仕組み
生徒
「先生、COBOLで足し算や引き算をしたいときって、どうやって書くんですか?」
先生
「COBOLでは、COMPUTE(コンピュート)文を使うと、簡単に数値の計算ができますよ。」
生徒
「へえ!なんか英語っぽい単語ですね。どんなふうに使うんですか?」
先生
「では、基本的な使い方から一緒に見ていきましょう。」
1. COMPUTE文とは?初心者でもわかる「計算の基本」
COBOLのCOMPUTE文は、数値を計算してその結果を変数に代入するための命令です。英語の「計算する(compute)」という言葉の通り、複雑な数式を直感的に記述できるのが最大の特徴です。
プログラミング未経験の方にとって、COBOLの計算は難しく感じるかもしれません。しかし、COMPUTE文は「学校で習った算数の式」をほぼそのまま書くだけで動きます。例えば、「売上(SALES)から原価(COST)を引いて、利益(PROFIT)を出す」といった計算も、パズルを組み合わせるように簡単に表現できます。
COMPUTE文の基本構文
まずは、一番シンプルな書き方を見てみましょう。算数の「=(イコール)」の向きに注目してください。
COMPUTE 結果を入れる変数 = 計算したい式
この式の部分には、数字を直接入れることもできますし、「変数(値が入った箱)」を組み合わせて使うこともできます。また、四則演算(+、-、*、/)を自由に組み合わせて、一度に複雑な計算を行うことが可能です。
【未経験者向け】100円のリンゴを3個買った時の計算例
具体的に、日常生活のような計算をCOBOLで書いてみましょう。「100円の商品を3個買ったときの合計金額」を計算するプログラムの一部です。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(3) VALUE 100. *> 商品の単価(100円)
01 COUNT PIC 9(1) VALUE 3. *> 買った個数(3個)
01 ANS PIC 9(3). *> 合計を入れる箱
PROCEDURE DIVISION.
COMPUTE ANS = PRICE * COUNT
DISPLAY "計算結果は " ANS " 円です。"
計算結果は 300 円です。
上記の例では、PRICE * COUNT(単価×個数)の計算結果が、自動的にANSという変数に格納されます。このように、COMPUTE文は「左側に答えを書き、右側に計算式を書く」というルールさえ覚えれば、誰でもすぐに使いこなせる便利な文法なのです。
2. COMPUTE文の基本的な使い方
では、実際にCOBOLで足し算や掛け算をしてみましょう。以下のサンプルでは、商品の価格と個数を掛け算して合計金額を求めています。
IDENTIFICATION DIVISION.
PROGRAM-ID. COMPUTE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(4) VALUE 500.
01 QUANTITY PIC 9(2) VALUE 3.
01 TOTAL PIC 9(6).
PROCEDURE DIVISION.
COMPUTE TOTAL = PRICE * QUANTITY
DISPLAY "合計金額は " TOTAL " 円です。"
STOP RUN.
合計金額は 1500 円です。
このように、COMPUTE TOTAL = PRICE * QUANTITYの形で書くだけで、掛け算の結果がTOTALに入ります。難しい計算式でも1行で表現できるのがCOMPUTE文の魅力です。
3. 算術演算子(+ − × ÷)の意味を理解しよう
COBOLで使える主な算術演算子(さんじゅつえんざんし)を一覧で見てみましょう。算術演算子とは、「数値を計算するための記号」です。算数の記号と同じなので、初心者でもすぐに覚えられます。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
| + | 足し算 | 5 + 3 | 8 |
| - | 引き算 | 5 - 2 | 3 |
| * | 掛け算 | 4 * 2 | 8 |
| / | 割り算 | 10 / 2 | 5 |
COBOLでは、これらの記号を使って自由に数値を計算できます。また、括弧(かっこ)を使うと計算の順番を変えることも可能です。
COMPUTE RESULT = (5 + 3) * 2
結果:16
このように括弧をつけることで、「5 + 3」を先に計算してから「×2」を行うようになります。もし括弧がないと、掛け算が先に実行されて結果が変わることがあります。算数と同じルールですね。
4. 複数の演算をまとめて行う
COMPUTE文では、複雑な計算も一行でまとめて書けます。例えば「売上 = (価格 × 個数) − 割引額」のような計算も簡単にできます。
COMPUTE TOTAL = (PRICE * QUANTITY) - DISCOUNT
このように書くと、括弧の中が先に計算され、最後に割引が引かれます。COBOLのCOMPUTE文は、日常の電卓操作と同じ感覚で使えるのが特徴です。
さらに、計算結果をそのまま表示することもできます。
COMPUTE TOTAL = (PRICE * QUANTITY) - DISCOUNT
DISPLAY "お支払い金額は " TOTAL " 円です。"
お支払い金額は 2700 円です。
5. COMPUTE文とADD・SUBTRACTとの違い
COBOLでは、数値を計算する方法としてADD(足し算)、SUBTRACT(引き算)などの専用文もありますが、COMPUTEを使うとそれらを一つにまとめて書けます。
例えば、次の2つの書き方は同じ意味になります。
ADD PRICE TO TOTAL.
COMPUTE TOTAL = TOTAL + PRICE.
COMPUTE文を使うと、複数の演算をまとめて一行で書けるため、可読性(読みやすさ)が高くなります。最近のCOBOLプログラムでは、COMPUTE文のほうがよく使われています。
6. 0で割るとどうなる?エラー処理に注意
割り算(/)を使うときに注意が必要なのが、「0で割ってはいけない」というルールです。数学と同じで、0で割ると計算ができません。
COBOLでは、0で割ると「ゼロ除算エラー(Zero Divide)」が発生してプログラムが止まってしまうことがあります。安全に計算するためには、事前に分母が0でないことを確認しておくとよいでしょう。
IF DENOMINATOR NOT = 0
COMPUTE RESULT = NUMERATOR / DENOMINATOR
DISPLAY "計算結果:" RESULT
ELSE
DISPLAY "0では割り算できません。"
END-IF
7. COMPUTE文をマスターすればCOBOLの数値演算は怖くない!
COMPUTE文は、COBOLの中でも特によく使われる命令のひとつです。業務システムでは売上や税金、在庫数などの計算が多く登場するため、数値演算の基本を理解しておくととても役に立ちます。
「難しい数式を書かなきゃ」と思うかもしれませんが、COBOLのCOMPUTE文は英語の文のように自然な形で書けるのがポイントです。慣れてくると、読みやすくエラーの少ないコードが書けるようになります。
まとめ
ここまで、COBOLにおける数値計算の要であるCOMPUTE文と、それを取り巻く算術演算子の基本について詳しく解説してきました。業務システム開発において、データの集計や消費税計算、在庫管理などの数値処理は避けて通れない要素です。従来のCOBOLではADD文やSUBTRACT文といった専用の命令も多用されてきましたが、現代のプログラミングスタイルにおいては、直感的で可読性の高いCOMPUTE文が主流となっています。
COBOLの計算処理を支える重要ポイントの振り返り
COBOLで効率的なプログラムを書くためには、COMPUTE文の特性を正しく理解し、算術演算子を適切に組み合わせることが不可欠です。以下に、本記事で学んだ重要なポイントを整理しました。
- COMPUTE文の汎用性: 四則演算を一つの式で表現できるため、プログラムの行数を減らし、ロジックを簡潔に保つことができます。
- 演算子の優先順位と括弧の活用: 算数と同様に、掛け算・割り算が足し算・引き算より優先されます。意図しない計算結果を防ぐために、優先したい箇所には必ず「( )」を使いましょう。
- 精度の確保: COBOLは金融機関などの基幹システムで使われることが多いため、計算結果を格納する変数の桁数定義(PIC句)には細心の注意が必要です。
- エラーハンドリング: ゼロ除算などはシステムダウンの原因になります。事前に条件分岐(IF文)でチェックする習慣をつけましょう。
実践的なサンプルプログラム:平均値の算出とC#での比較
さらに理解を深めるために、複数の値から平均値を算出する実践的なコードを見てみましょう。COBOLでの実装と、現代的なオブジェクト指向言語であるC#での実装を比較することで、それぞれの言語の特徴が見えてきます。
COBOLによる平均値計算プログラム
3つのテスト点数の合計を出し、その平均を求めるプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. AVERAGE-CALC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SCORE-1 PIC 9(3) VALUE 85.
01 SCORE-2 PIC 9(3) VALUE 90.
01 SCORE-3 PIC 9(3) VALUE 75.
01 TOTAL-SCORE PIC 9(3).
01 AVG-SCORE PIC 9(3)V99.
PROCEDURE DIVISION.
*> 合計と平均を一気に計算する
COMPUTE TOTAL-SCORE = SCORE-1 + SCORE-2 + SCORE-3.
COMPUTE AVG-SCORE = TOTAL-SCORE / 3.
DISPLAY "合計点数: " TOTAL-SCORE.
DISPLAY "平均点数: " AVG-SCORE.
STOP RUN.
合計点数: 250
平均点数: 83.33
C#による同様の数値計算プログラム
C#では変数の宣言と同時に計算を行うことが一般的です。COBOLのCOMPUTE文に近い直感的な記述が可能です。
using System;
class Program
{
static void Main()
{
int score1 = 85;
int score2 = 90;
int score3 = 75;
// 合計と平均の算出
int totalScore = score1 + score2 + score3;
double avgScore = (double)totalScore / 3;
Console.WriteLine("合計点数: " + totalScore);
Console.WriteLine("平均点数: " + avgScore.ToString("F2"));
}
}
合計点数: 250
平均点数: 83.33
このように、言語が違っても「数値を計算して変数に代入する」という基本構造は変わりません。COBOLのCOMPUTE文をマスターすることは、他の言語を学ぶ際にも役立つ汎用的なスキルと言えるでしょう。
SEOキーワードとしてのCOBOL数値計算
COBOLの学習において、「計算式」「算術演算」「COMPUTE 使い方」といったキーワードは非常に重要です。特に、レガシーシステムのマイグレーション(移行)や保守運用の現場では、複雑な計算ロジックを正確に読み解く力が求められます。この記事が、新人プログラマーやCOBOLを学び直すエンジニアの皆様にとって、確かな手助けとなれば幸いです。
生徒
「先生、ありがとうございました!COMPUTE文って、思ったよりもずっとシンプルなんですね。他のプログラミング言語と似ていて、なんだか親近感がわきました。」
先生
「そうですね。COBOLは『事務計算用』として生まれた言語ですから、数式を人間が読む英語に近い形で書けるよう設計されているんです。だから、数式がそのままプログラムになるCOMPUTE文は、COBOLの良さが一番出ている部分かもしれませんね。」
生徒
「たしかに!でも、さっきのサンプルで『PIC 9(3)V99』という記述がありましたが、これは小数点以下の桁数を決めているんですよね?」
先生
「その通り、鋭いですね!COBOLでは計算式だけでなく、結果を入れる器(変数)の形をしっかり定義することがとても大切です。小数点を扱う計算では、端数処理(四捨五入や切り捨て)が必要になることも多いので、次は『ROUNDED』句についても勉強してみましょうか。」
生徒
「ROUNDED句ですか。四捨五入まで自動でやってくれるなんて便利そう!ぜひ教えてください。計算ミスでシステムが止まらないように、しっかりマスターしたいです。」
先生
「その意気です。業務システムでは、1円のズレも許されませんからね。正確な知識を身につけて、信頼されるプログラマーを目指しましょう!」