【COBOL学習|初心者向け】COBOLの割り算で「余り」を求める際のスマートな作法

なぜこのTipsが重要なのか

COBOLで割り算を行う際、単に商だけでなく「余り」を求めたい場面は多々あります。例えば、在庫管理での箱詰め計算や、日付の計算などがそうです。しかし、COBOLのDIVIDE文には特有の「お作法」があり、それを知らないと思わぬエラーや、不要な変数でプログラムが汚れる原因になります。今回は、REMAINDER句を正しく扱うための鉄則を解説します。

基礎知識:REMAINDER句のルール

COBOLのDIVIDE文でREMAINDER(余り)を求める場合、商を格納する項目も必ず指定しなければならないというルールがあります。
「余りだけを知りたい」という場合でも、商を受け取る変数を省略することはできません。もし、商が不要な場合でも、計算結果を格納するための領域(受け皿)をどこかに用意する必要があります。

実装の解決策:ダミー項目を使う

現場でよく使われる手法は、商を格納するための「作業用ダミー項目」を一つ用意することです。このダミー項目に商を捨て、必要な余りだけを別の項目で受け取ることで、プログラムの意図を明確に保つことができます。

サンプルプログラム

以下のコードは、100を3で割った余りを求める例です。商は不要なため、ダミー項目へ逃がしています。

IDENTIFICATION DIVISION.
PROGRAM-ID. DIVIDE-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • 計算対象の値

01 WS-DIVIDEND PIC 9(03) VALUE 100.
01 WS-DIVISOR PIC 9(01) VALUE 3.

  • 商を捨てるためのダミー項目

01 WS-DUMMY-QUOTIENT PIC 9(03).

  • 余りを格納する項目

01 WS-REMAINDER PIC 9(01).

PROCEDURE DIVISION.

  • 100 ÷ 3 を実行
  • 商は WS-DUMMY-QUOTIENT に、余りは WS-REMAINDER に格納される

DIVIDE WS-DIVIDEND BY WS-DIVISOR
GIVING WS-DUMMY-QUOTIENT
REMAINDER WS-REMAINDER.

  • 結果を表示(この場合、WS-REMAINDERには 1 が入る)

DISPLAY “余りは: ” WS-REMAINDER.

STOP RUN.

応用と注意点

現場で陥りやすいバグとして、「変数の桁数不足」が挙げられます。特に商を捨てるためのダミー項目(WS-DUMMY-QUOTIENT)の桁数が、演算結果の商を収容できないほど小さいと、桁あふれエラーや予期せぬ挙動を引き起こす可能性があります。
ダミー項目であっても、商が十分に収まるだけの桁数を確保しておくのが、ベテラン技術者の安全策です。また、ゼロ除算(0で割る)が発生しないよう、DIVIDE文の前には必ず除数が0でないかチェックするロジックを入れる癖をつけましょう。

コメント

タイトルとURLをコピーしました