COBOLのMULTIPLY・DIVIDE文を完全ガイド!初心者でもわかる掛け算と割り算の基本と活用例
生徒
「先生、COBOLで掛け算や割り算をするにはどうすればいいですか?」
先生
「COBOLでは、掛け算にはMULTIPLY文、割り算にはDIVIDE文を使います。英語の単語の意味そのままで、とてもわかりやすいですよ。」
生徒
「なるほど!でも実際にはどんなふうに書くんですか?」
先生
「それでは、COBOLでの掛け算と割り算の基本的な書き方と注意点を、わかりやすく見ていきましょう。」
1. MULTIPLY文とは?
COBOLのMULTIPLY文は、掛け算(乗算)を行うための命令です。英語の「multiply(掛ける)」という意味の通り、数値を掛け合わせて結果を変数に格納します。
基本形は次のようになります。
MULTIPLY 数値1 BY 数値2.
これは「数値2に数値1を掛ける」という意味です。つまり「数値2 × 数値1」の計算になります。結果は、BYの後にある変数に上書きされます。
▶ 簡単な例
IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLY-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(4) VALUE 120.
01 QUANTITY PIC 9(3) VALUE 3.
PROCEDURE DIVISION.
MULTIPLY PRICE BY QUANTITY.
DISPLAY "合計金額は " QUANTITY " 円です。"
STOP RUN.
合計金額は 360 円です。
このプログラムでは、120 × 3を計算して、QUANTITYに結果の「360」が代入されます。
2. GIVINGを使って結果を別の変数に入れる
MULTIPLY文で結果を別の変数に入れたい場合は、GIVINGを使います。これは「結果を〜に与える」という意味です。
MULTIPLY 数値1 BY 数値2 GIVING 結果変数.
▶ 実際の例
IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLY-GIVING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(4) VALUE 150.
01 QUANTITY PIC 9(3) VALUE 2.
01 TOTAL PIC 9(5).
PROCEDURE DIVISION.
MULTIPLY PRICE BY QUANTITY GIVING TOTAL.
DISPLAY "合計金額は " TOTAL " 円です。"
STOP RUN.
合計金額は 300 円です。
GIVINGを使うことで、もとの変数を変更せずに計算結果だけを新しい変数に保存することができます。実務でも安全でおすすめの書き方です。
3. DIVIDE文とは?
次に、COBOLのDIVIDE文を使って割り算をしてみましょう。DIVIDEは「divide(割る)」という英語の通り、数値を割る命令です。
基本形は次の通りです。
DIVIDE 数値1 INTO 数値2.
これは「数値2 ÷ 数値1」という意味になります。INTOの前にある数値で割るので、語順に注意しましょう。
▶ 簡単な例
IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL PIC 9(4) VALUE 100.
01 PEOPLE PIC 9(2) VALUE 5.
PROCEDURE DIVISION.
DIVIDE PEOPLE INTO TOTAL.
DISPLAY "一人あたり " TOTAL " 円です。"
STOP RUN.
一人あたり 20 円です。
このプログラムでは、「100 ÷ 5 = 20」を計算しています。INTOの位置を間違えると結果が逆になってしまうので注意しましょう。
4. DIVIDE文のGIVINGを使う方法
DIVIDE文でも、GIVINGを使うことで結果を別の変数に格納できます。
DIVIDE 数値1 INTO 数値2 GIVING 結果変数.
または、次のように書くと「数値1 ÷ 数値2」の形になります。
DIVIDE 数値1 BY 数値2 GIVING 結果変数.
このように、INTOとBYのどちらを使うかで割る方向が変わります。
▶ 実際の例
IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-GIVING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL PIC 9(4) VALUE 500.
01 PEOPLE PIC 9(2) VALUE 4.
01 EACH PIC 9(3).
PROCEDURE DIVISION.
DIVIDE TOTAL BY PEOPLE GIVING EACH.
DISPLAY "一人あたり " EACH " 円です。"
STOP RUN.
一人あたり 125 円です。
DIVIDE文も、GIVINGを使うことで結果を安全に管理できます。
5. 割り算の余りを求める(REMAINDER)
COBOLでは、割り算の余り(あまり)を求めたい場合、REMAINDERを使います。これは「残り」という意味で、割り算の結果の余りを別の変数に格納できます。
DIVIDE 数値1 BY 数値2 GIVING 商変数 REMAINDER 余り変数.
▶ 実際の例
IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-REMAINDER.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL PIC 9(4) VALUE 103.
01 PEOPLE PIC 9(2) VALUE 10.
01 QUOTIENT PIC 9(3).
01 REM PIC 9(2).
PROCEDURE DIVISION.
DIVIDE TOTAL BY PEOPLE GIVING QUOTIENT REMAINDER REM.
DISPLAY "一人あたり " QUOTIENT " 個、余りは " REM " 個です。"
STOP RUN.
一人あたり 10 個、余りは 3 個です。
このようにして、商(割った結果)と余りを同時に求めることができます。
6. MULTIPLY・DIVIDE文を使うときの注意点
COBOLの数値演算は非常に厳密に管理されています。いくつかの注意点を覚えておきましょう。
① 桁あふれ(オーバーフロー)に注意
結果が変数に入りきらない場合、値が壊れたり、プログラムがエラーになることがあります。PIC句の桁数を十分に確保しておきましょう。
② 小数点を扱うときはVを使う
金額や割合など小数を使いたい場合は、Vを使って小数点位置を定義します。
01 PRICE PIC 9(3)V9(2) VALUE 12.50.
01 TAX PIC 9(2)V9(2) VALUE 1.08.
01 RESULT PIC 9(4)V9(2).
MULTIPLY PRICE BY TAX GIVING RESULT.
これで「12.50 × 1.08 = 13.50」のような小数計算も正しく行えます。
③ INTOとBYを混同しない
DIVIDE文では、「INTO」と「BY」で計算の方向が変わります。INTOは「割られる数 ÷ 割る数」、BYは「割る数 ÷ 割られる数」になります。混同すると結果が全く違ってしまいます。
④ GIVINGを使って安全に結果を保存
元の値を残したいときは、GIVINGで結果を別の変数に入れるようにしましょう。業務プログラムでは、データを壊さない設計がとても大切です。
7. 実務での活用例
MULTIPLYとDIVIDEは、売上計算・平均値計算・税金の計算などで頻繁に使われます。たとえば「商品の単価×数量=合計金額」「合計÷人数=一人あたり金額」など、日常の計算をそのままプログラムに書けるのがCOBOLの魅力です。
また、COBOLは金融システムや給与計算システムなど、数値の正確さが求められる分野で長く使われてきた言語です。だからこそ、MULTIPLYやDIVIDEのような数値演算をしっかり理解することが、COBOLを使いこなす第一歩になります。