COBOL言語で除算(割り算)処理をするなら「DIVIDE文」で! | 用語辞典
COBOL(コボル)言語の予約語DIVIDEを使った除算処理とは
COBOL(コボル)言語のDIVIDE文とは?
COBOL(コボル)言語のDIVIDE文は、分ける・分割するという意味を持つ命令文で、対象となる2つの一意名(データ項目)や数値を指定し、除算(割り算)処理を行ないます。 DIVIDE文は除算処理専用の命令文です。
書き方1: (通常の除算)
- DIVIDE 一意名A INTO 一意名B (データ項目とデータ項目を除算する)
- DIVIDE 除算定数 INTO 一意名C (一意名Cを指定した数値で除算する)
使用例1:
- DIVIDE DIVIDE-DATA01 INTO DIVIDE-DATA02 (DATA02をDATA01で除算してDATA02に格納します。)
- DIVIDE 30 INTO DIVIDE-DATA03 (DATA03を30で割り、DIVIDE-DATA03に格納します。)
※
INTOを使用する除算では右のデータ項目を左のデータ項目で割ります。
(一意名B÷一意名Aとなります。この場合、INTOの後にくるデータ項目の一意名Bに上書きされます。)
書き方2: (INTO~GIVING指定の除算)
- DIVIDE 一意名A INTO 一意名B GIVING 一意名C (一意名Bを一意名Aで除算し、一意名Cに格納する。)
- DIVIDE 除算定数1 INTO 一意名D GIVING 一意名E (一意名Dを数値で除算し、一意名Eに格納する。)
- DIVIDE 除算定数2 INTO 除算定数3 GIVING 一意名F (指定した数値で除算し、一意名Fに格納する。)
使用例2:
- DIVIDE RESULT-DATA01 INTO RESULT-DATA02 GIVING AVERAGE-RESULT01
- DIVIDE 2 INTO RESULT-DATA03 GIVING AVERAGE-RESULT02
※ 書き方1(通常の除算)では、数値データ項目同士を除算し、INTOの後に続くデータ項目へ数値を上書きしていました。しかし、書き方2のGIVING指定の除算方法では、割った後の数値(商)をGIVINGの後に指定した新たなデータ項目に格納します。除算処理に使用したデータ項目(商を求める為に参照した数値)を上書きさせたくない場合は、GIVING指定の除算処理を用います。
書き方3: (BY~GIVING指定の除算)
- DIVIDE 一意名A BY 一意名B GIVING 一意名C (一意名Aを一意名Bで除算し、一意名Cに格納する。)
- DIVIDE 一意名D BY 除算定数1 GIVING 一意名E (一意名Dを数値で除算し、一意名Eに格納する。)
- DIVIDE 除算定数2 BY 除算定数3 GIVING 一意名F (指定した数値で除算し、一意名Fに格納する。)
使用例3:
- DIVIDE RESULT-DATA02 BY RESULT-DATA01 GIVING AVERAGE-RESULT01
- DIVIDE RESULT-DATA03 BY 2 GIVING AVERAGE-RESULT02
※ INTOを指定した書き方1、書き方2ではINTOの右側にあるデータ項目を左側にあるデータ項目で除算処理していました。しかし、書き方3のBYを指定した除算方法では、逆にBYの左側にあるデータ項目を右側のデータ項目で除算します。(一意名A÷一意名Bとなります。)用例3の除算処理は、用例2とまったく同じ処理を行っています。
書き方4: (INTO~GIVING+REMAINDER指定の除算)
-
DIVIDE
一意名A
INTO
一意名B
GIVING
一意名C
REMAINDER
一意名D
(一意名Bを一意名Aで除算し、一意名Cに商を格納し、その余りを一意名Dに格納する。) -
DIVIDE
除算定数1
INTO
一意名E
GIVING
一意名F
REMAINDER
一意名G
(一意名Eを数値で除算し、一意名Fに商を格納し、その余りを一意名Gに格納する。) -
DIVIDE
除算定数2
INTO
除算定数3
GIVING
一意名H
REMAINDER
一意名I
(指定した数値で除算し、一意名Hに商を格納し、その余りを一意名Iに格納する。)
使用例4:
- DIVIDE TEST-SCORE01 INTO TEST-SCORE02 GIVING AVERAGE-VALUE REMAINDER MODULO
※ ここまでの書き方では、除算処理した結果の数値(商)と余りは基本的に一緒に格納されてきました。書き方4では、REMAINDERを指定することにより、割って得られた数値(商)と剰余(余り)を別々に計算し、各指定したデータ項目に格納することができます。計算処理自体は、書き方2と変わりはありません。
書き方5: (BY~GIVING+REMAINDER指定の除算)
-
DIVIDE
一意名A
BY
一意名B
GIVING
一意名C
REMAINDER
一意名D
(一意名Aを一意名Bで除算し、一意名Cに商を格納し、その余りを一意名Dに格納する。) -
DIVIDE
一意名E
BY
除算定数1
GIVING
一意名F
REMAINDER
一意名G
(一意名Eを数値で除算し、一意名Fに商を格納し、その余りを一意名Gに格納する。) -
DIVIDE
除算定数2
BY
除算定数3
GIVING
一意名H
REMAINDER
一意名I
(指定した数値で除算し、一意名Hに商を格納し、その余りを一意名Iに格納する。)
使用例5:
- DIVIDE TEST-SCORE02 BY TEST-SCORE01 GIVING AVERAGE-VALUE REMAINDER MODULO
※ 書き方4と同様に、BY~GIVINGの後にREMAINDERを指定することにより、割って得られた数値(商)と剰余(余り)を別々に計算し、各指定のデータ項目に格納します。計算処理自体は、書き方3と変わりありません。 用例4と用例5は、書き方は違いますがまったく同じ処理をしています。
COBOL(コボル)言語のDIVIDE文-ソースと実行例
DIVIDE文のCOBOL言語における基本事項やルール
- DIVIDE文に使用できるデータ項目は、数字項目となります。 GIVING 指定した除算処理に関しては、 GIVING の後に続くデータ項目にのみ数字編集項目(通貨編集用文字を含む項目)を用いることができます。
- 「 REMAINDER 」が指定されたDIVIDE文の剰余は、割って得た数値(商)と割った数を掛算した余りが剰余となります。
- 1~5の書き方に、「 ROUNDED 」指定を付けることができます。(書き方は「 DIVIDE 一意名A INTO 一意名B ROUNDED 」) これが指定された場合、データ項目で指定した小数点以下の小数部の桁数を超える大きさの結果が算出された時に、本来なら切捨てされるところを、四捨五入して計算します。一般的な四捨五入と同様に、 ROUNDED 指定された切り捨て予定の小数部の最上位の値が5以上である場合は、整数の最下位の値が切り上がります。
- 1~5の書き方に、「 ON SIZE ERROR 」指定を付けることができます。(書き方は「ON SIZE ERROR 無条件文(実行させる内容)」とDIVIDE文の後に続けて書きます。) これは計算処理をした時に、データ項目で指定した最大値を超える結果が算出された場合に実行する処理を記述するものです。最大値を超えた(あふれた)状態を桁あふれといいます。「 ON SIZE ERROR 」は、この桁あふれを起した時に条件分岐する条件文を記述するためのものです。
- 1~5の書き方に、「 NOT ON SIZE ERROR 」指定を付けることもできます。これは上記の「 ON SIZE ERROR 」とは逆に桁あふれで無い時の処理を記述するものです。「 SIZE ERROR 」関連の処理を指定しないまま、桁あふれが起こった場合は、致命的なエラーとなる可能性もありますので、注意が必要です。
- 「 REMAINDER 」が指定されているDIVIDE文に、「 ON SIZE ERROR 」を指定すると商(割った数値)の桁あふれだけでなく、剰余(余り)の桁あふれにも対応します。
- 「ROUNDED」 と「 ON SIZE ERROR 」が両方あわせて指定された場合、四捨五入の処理後に桁あふれのチェックをし、あふれチェックを行います。この時、あふれていれば「 ON SIZE ERROR 」の無条件文に移り処理を実行します。基本的に、「 ON SIZE ERROR 」の処理が実行された場合、あふれた計算結果はデータ項目に格納せず計算前のデータを保持します。
COBOL(コボル)言語のDIVIDE文を使う上での注意点
- DIVIDE文は、数値計算用の命令文です。ですので、数値定数のみ使用できます。文字定数や表意定数は扱うことはできません。
- 書き方4、5の REMAINDER 指定の除算方法で、 「ROUNDED」 指定がされている場合は、剰余(余り)を計算する時に用いる商(割った時に得られる数値)は、四捨五入する前の数値を参照されるので、注意が必要です。
- 書き方2、3の GIVING 指定された除算処理は、 GIVING の後のデータ項目に複数個の対象を指定することが可能です。ですが、書き方4、5の GIVING+REMAINDER 指定された除算処理は1つのデータ項目しか書くことができません。
DIVIDE文を使ったCOBOL(コボル)プログラムの活用法
COBOL(コボル)言語の除算処理は、商(割って得られた数)と余剰(余り)を同時に求めたい場合に、命令文のDIVIDE文を活用すると非常に便利です。 ROUNDED 指定をしている場合、若干の誤差がでる場合に注意が必要ですが、活用することで様々な処理ができます。今回は、現在時刻を取得しDIVIDE文を使って割った剰余(余り)を活用した簡単な分岐プログラムをご紹介いたします。
- IDENTIFICATION DIVISION.
- PROGRAM-ID. DIVIDE-SAMPLE03.
- DATA DIVISION.
- WORKING-STORAGE SECTION.
- 01 WORKING-AREA.
- 03 INPUT-DATA PIC 9.
- 03 TIME-DATA PIC 9(8).
- 03 AVERAGE-RESULT PIC 999.
- 03 MODULO PIC 9.
- 03 VALUE-DATA PIC 99.
- PROCEDURE DIVISION.
- ACCEPT TIME-DATA FROM TIME.
- DIVIDE 10 INTO TIME-DATA
- GIVING AVERAGE-RESULT REMAINDER MODULO.
- DISPLAY "おみくじ占い エンターを押そう!" .
- ACCEPT VALUE-DATA FROM CONSOLE.
- EVALUATE MODULO
- WHEN = 1
- DISPLAY "貴方の運勢は大吉!"
- WHEN = 2
- DISPLAY "貴方の運勢は中吉!"
- WHEN = 3
- DISPLAY "貴方の運勢は小吉!"
- WHEN = 4
- DISPLAY "貴方の運勢は吉!"
- WHEN = 5
- DISPLAY "貴方の運勢は末吉!"
- WHEN = 6
- DISPLAY "貴方の運勢は凶!"
- WHEN = 7
- DISPLAY "貴方の運勢は大凶!"
- WHEN = 8
- DISPLAY "貴方の運勢は大吉!"
- WHEN = 9
- DISPLAY "貴方の運勢は大凶!"
- END-EVALUATE.
- STOP-RUN.
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの
求人情報
が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典