COBOLで割り算をしたいときに登場する命令、それがDIVIDE
。ただ、構文がいろいろあって「どれを使えば?」と混乱していませんか?
この記事では、COBOLのDIVIDE
命令について、初学者にもわかるように基礎から順を追って解説していきます。INTO
とBY GIVING
の違い、割り算の余りの出し方、構文ごとの使い分けなど、スッキリ理解できる内容で紹介します。
「DIVIDE命令って、なんだか割り切れない関係かも…」なんて思っていたあなたも、読み終わるころには仲良くなってるかもしれません。
この記事で学べること
-
DIVIDE
命令の基本構文と意味 -
INTO
とBY GIVING
の使い方と違い -
REMAINDER
句を使った余りの計算方法 -
割り算でよくあるミスとその対処法
-
初心者でも迷わない使い分けのコツ
COBOL算術命令DIVIDEとは?割り算の基本を理解しよう
COBOLには、数字を計算するための命令がいくつかあります。
割り算を担当するのが「DIVIDE」命令です。名前のまんま「割る」という意味なので、見た目通りですね。
プログラムで「100を4で割って、結果を別の変数に入れたい」といったときに活躍するのがDIVIDE命令です。ふつうの電卓では当たり前のようにやっている割り算も、COBOLではちゃんとルールに従って命令を書く必要があります。
似たような仲間には、足し算の「ADD」、引き算の「SUBTRACT」、かけ算の「MULTIPLY」があります。これらと並んで、DIVIDEは四則演算のひとつを担う存在です。
ただし、割り算には「余り」が出る場合や、結果をどの変数に入れるかで少し書き方が変わってきます。次の章では、まず基本の書き方を見ていきましょう。
COBOL算術命令DIVIDEの基本的な書き方(構文)
DIVIDE命令の基本形はとてもシンプルです。まずは深く考えず、次のような構文を覚えてしまいましょう。
DIVIDE 割る数 INTO 割られる数.
例えば「4を100に割る」なら、こんな感じになります。
DIVIDE 4 INTO A.
この命令は「A ÷ 4」の結果をAに入れるという意味です。つまり、元の値が上書きされてしまうので注意が必要です。
構文のポイントをざっくりまとめると、こんな感じです。
- DIVIDEは「割り算」をする命令
- INTOは「どこに割るのか」を示すキーワード
- 計算結果は、割られる変数に上書きされる
構文にはバリエーションもありますが、最初はこの「INTO」パターンをしっかり覚えるのがおすすめです。続くセクションで、他のパターンも紹介していきます。
結果を割れる数に入れる!DIVIDE INTO構文
DIVIDE INTO構文は、割った結果(商)を「割られる側」の変数に直接上書きしてしまうタイプの書き方です。計算結果がすぐに変数に反映されるのは便利ですが、もともとの値が消えてしまうので注意が必要です。
使い方はとてもシンプル。たとえば、AをBに割って、その結果をBに入れるなら、次のように書きます。
DIVIDE A INTO B.
この命令は「B ÷ A」の結果をBに格納するという意味です。直感とちょっと逆に感じるかもしれませんが、COBOLのルールなので素直に受け入れたほうがラクです。
構文のポイント
- 「DIVIDE 割る数 INTO 割られる数.」の形になる
- 商は「割られる数」に上書きされる
- 元の値がなくなるので、結果だけを使いたいときに向いている
DIVIDE INTOの書き方
以下は、DIVIDE INTO構文を使った簡単な書き方です。変数に初期値を入れておき、割り算を実行しています。
DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC 9(3) VALUE 4. 01 B PIC 9(3) VALUE 20. PROCEDURE DIVISION. DIVIDE A INTO B.
このコードを実行すると、Bの値は「20 ÷ 4 = 5」となり、Bに5が代入されます。つまり、Bの元の値20は消えます。もし後で20を使いたい場合は、先に別の変数にコピーしておく必要があります。
結果を別変数に入れる!COBOL算術命令DIVIDE BY GIVING構文
今度は、計算結果を別の変数に保存できるDIVIDE BY GIVING構文を紹介します。割り算の対象(割る数・割られる数)をそのまま残しつつ、結果だけを指定した変数に入れる方法です。
たとえば、AをBで割った結果をCに入れるなら、次のように書きます。
DIVIDE A BY B GIVING C.
この場合、AやBの値は変わらず、計算結果だけがCに代入されます。元の数を保存しておきたい場合や、結果だけ取り出したいときにとても便利です。
INTO構文とのちがい
- INTOは結果を「割られる数」に上書きする
- BY GIVINGは結果を「別の変数」に入れる
- 元の値を壊したくないなら、BY GIVINGを選ぶのが安心
DIVIDE BY GIVINGの書き方
以下は、DIVIDE BY GIVINGを使ったサンプルコードです。
DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC 9(3) VALUE 20. 01 B PIC 9(3) VALUE 4. 01 C PIC 9(3) VALUE 0. PROCEDURE DIVISION. DIVIDE A BY B GIVING C.
実行結果は、Cに「20 ÷ 4 = 5」が格納されます。AとBの値はそのまま残るので、あとでまた別の計算に使いたいときにとても便利です。
INTOとBY GIVING、どちらを使うかは目的次第です。値を上書きしたいか、残したいかで使い分けましょう。
割り算の余りも計算!COBOL算術命令DIVIDEとREMAINDER句
割り算の結果って、商だけじゃ物足りない場面もありますよね。たとえば「偶数か奇数かを判定したい」「5で割った余りを使って処理を変えたい」など、余りが必要になるケースは意外と多いです。
そんなときに使えるのが、REMAINDER句です。DIVIDE INTOやDIVIDE BY GIVINGと組み合わせて使うと、商と余りをいっぺんに求められます。
構文の形は、次のようになります。
DIVIDE A INTO B GIVING C REMAINDER D.
この命令は「B ÷ A」の商をCに、余りをDに入れるという意味です。BY GIVINGパターンでも同じように書けます。
DIVIDE A BY B GIVING C REMAINDER D.
どちらを使っても、REMAINDER句を付けることで、商と余りの両方を手に入れることができます。
REMAINDER句が役立つ場面
- 偶数・奇数の判定(2で割って余りが0なら偶数)
- 特定の周期処理(例:5件ごとに処理を変える)
- 割り切れないケースのチェック
余りを扱うなら、REMAINDER句はぜひ覚えておきたい相棒です。
COBOL算術命令DIVIDEを使う上での重要注意点
DIVIDE命令は便利ですが、使い方を間違えるとエラーの原因になります。予期せぬ計算ミスやプログラムの停止を防ぐために、以下の点はしっかり意識しておきましょう。
- ゼロで割らないこと(ゼロ除算エラー)
- PICTURE句の桁数や型のミスマッチ
- 小数点以下の扱い(暗黙の切り捨て)
- 必要に応じてROUNDED句で丸め処理を追加
次のセクションでは、ゼロ除算エラーの対処方法を詳しく見ていきます。
ゼロ除算エラーを防ぐには?
0で割るというのは、人間が見れば「やっちゃダメ」とわかりますが、プログラムは指示されたとおりにしか動きません。COBOLでも、0で割る命令があるとプログラムが異常終了してしまいます。
そんなときに活躍するのが、ON SIZE ERROR句です。割り算に失敗したとき、エラー処理を行うための保険のようなものです。
DIVIDE A BY B GIVING C ON SIZE ERROR DISPLAY 'ゼロ除算エラー発生!'.
このように書いておけば、Bが0でもプログラムは止まらず、エラーメッセージが表示されます。
もうひとつの方法として、事前にIF文でチェックするのも有効です。
IF B NOT = 0 DIVIDE A BY B GIVING C ELSE DISPLAY 'ゼロでは割れません!'.
理想は、両方を組み合わせることです。事前に防いで、それでも不意にゼロが来たときはON SIZE ERRORでフォローする。これが一番安心です。
COBOL算術命令DIVIDEのサンプルプログラム
ここまで学んできたDIVIDE命令を一気に活用する、実践的なサンプルプログラムを紹介します。
INTO、BY GIVING、REMAINDER、ON SIZE ERROR、ROUNDEDなどを組み合わせて、実行結果を見ながら学べるように構成しています。
実際に動かしながら理解を深めていきましょう。
IDENTIFICATION DIVISION. PROGRAM-ID. DIVIDE-DEMO. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC 9(3) VALUE 25. 01 B PIC 9(3) VALUE 4. 01 C PIC 9(3) VALUE 0. 01 D PIC 9(3) VALUE 0. 01 E PIC 9(3) VALUE 0. 01 F PIC 9(3) VALUE 0. 01 G PIC 9(3) VALUE 0. 01 H PIC 9(3) VALUE 0. 01 I PIC 9(3)V9 VALUE 10.5. 01 J PIC 9(3)V9 VALUE 3. 01 K PIC 9(3)V9 VALUE 0. PROCEDURE DIVISION. DISPLAY "----- DIVIDE INTO -----" DIVIDE B INTO A GIVING C REMAINDER D ON SIZE ERROR DISPLAY "ゼロ除算エラー". DISPLAY "商(C): " C. DISPLAY "余り(D): " D. DISPLAY "----- DIVIDE BY GIVING -----" DIVIDE A BY B GIVING E REMAINDER F ON SIZE ERROR DISPLAY "ゼロ除算エラー". DISPLAY "商(E): " E. DISPLAY "余り(F): " F. DISPLAY "----- ROUNDED -----" DIVIDE I BY J GIVING K ROUNDED ON SIZE ERROR DISPLAY "ゼロ除算エラー". DISPLAY "小数を四捨五入した結果(K): " K. STOP RUN.
実行結果(環境によって多少異なる場合があります)
----- DIVIDE INTO ----- 商(C): 006 余り(D): 001 ----- DIVIDE BY GIVING ----- 商(E): 006 余り(F): 001 ----- ROUNDED ----- 小数を四捨五入した結果(K): 4
サンプルプログラムの解説
まず、変数定義(DATA DIVISION)から見ていきます。AとBは整数の割り算に使う変数、C〜Fは商と余りの格納先です。I、J、Kは小数を扱う場面で使用しています。
- A(25)÷ B(4)= 6余り1
- I(10.5)÷ J(3)= 3.5(ROUNDEDにより4へ)
DIVIDE B INTO A GIVING C REMAINDER D は、「A ÷ B」の商をCに、余りをDに格納します。INTO構文ですが、GIVINGとREMAINDERを加えることでより柔軟に使えます。
DIVIDE A BY B GIVING E REMAINDER F は、BY GIVING構文。割り算の結果を別の変数EとFに入れ、AやBの元の値はそのまま残ります。
DIVIDE I BY J GIVING K ROUNDED は、小数同士の割り算です。ROUNDED句を使うことで、3.5を「4」に丸めてKに格納しています。ROUNDEDがないと切り捨てになります。
ON SIZE ERROR句は、ゼロ除算が発生したときの保険です。たとえばBやJが0だった場合、プログラムを止めずに処理を変えることができます。
全体の流れとしては、基本的な構文をベースにしながら、エラー対策と余りの処理を追加していくイメージです。初学者でも動かしながら学べる内容になっています。
まとめ
DIVIDE命令をマスターするには、構文の違いと使い分けを押さえるのがコツです。ここまで学んだポイントを簡単に整理します。
- DIVIDE INTO:結果を割られる変数に入れる。元の値は上書きされる。
- DIVIDE BY GIVING:結果を別の変数に入れる。元の値はそのまま。
- REMAINDER句:余りを別の変数に格納できる。
- ON SIZE ERROR句:ゼロ除算などのエラーを防ぐために使う。
- ROUNDED句:小数の計算結果を四捨五入して扱える。
割り算が苦手だった人も、COBOLのDIVIDE命令を使えばスッキリ処理できます。次はMULTIPLYやSUBTRACTなど、他の算術命令も触ってみると理解が深まりますよ。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。