【COBOL】6つのNUMERIC文活用法を解説

COBOLのNUMERIC文を使ったサンプルコードとその説明COBOL
この記事は約15分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、COBOLの基礎からNUMERIC文の使い方まで、初心者でも簡単に理解できるようになります。

COBOLは長い歴史を持つプログラミング言語で、特に金融やビジネス分野で広く利用されています。

この記事では、COBOLの基本的な概念とNUMERIC文の使い方を詳細に解説します。

特にNUMERIC文は、数値データを扱う上で非常に重要な部分であり、COBOLプログラミングの基礎を固めるために欠かせない知識です。

●COBOLとは

COBOL(Common Business-Oriented Language)は、1959年に開発されたビジネス向けの高水準プログラミング言語です。

その名の通り、ビジネスでのデータ処理に特化しており、金融機関や政府機関などで今でも広く使われています。

COBOLの特徴は、その読みやすい英語のような構文です。これにより、プログラミングが初めての人でも比較的学びやすい言語となっています。

○COBOLの歴史と特徴

COBOLは、その長い歴史の中で多くのバージョンアップを経てきました。

最初の標準化は1968年に行われ、その後も業界のニーズに合わせて改良が加えられています。

COBOLの主な特徴は次の通りです。

  • ビジネスアプリケーションに特化した設計
  • 英語に近い自然言語のような構文
  • 堅牢で信頼性の高いデータ処理能力
    これらの特徴により、COBOLは特に大規模なデータ処理が求められる金融業界や公共機関で長く使われ続けています。

○COBOLプログラミングの基本構造

COBOLプログラムは、特定の構造に従って書かれます。

基本的には次の4つの部分で構成されています。

  • Identification Division:プログラムの名前や作者などの識別情報を記述します。
  • Environment Division:プログラムが動作する環境(コンピュータやオペレーティングシステムなど)に関する設定を行います。
  • Data Division:プログラムで使用する変数の宣言を行います。この部分でNUMERICなどのデータ型を定義します。
  • Procedure Division:プログラムの実際の処理内容を記述します。ここで数値計算やデータの操作などの具体的な命令を記述します。

COBOLプログラミングを学ぶ上で、これらの基本構造の理解は非常に重要です。

●NUMERIC文の基礎知識

COBOLにおけるNUMERIC文は、数値データの取り扱いに不可欠な要素です。

ここでは、NUMERIC文の基本的な概念とその重要性について詳しく解説していきます。

NUMERIC文は数値を扱うためのデータ型を指し、COBOLプログラムにおいて非常に頻繁に使用されます。

正確な数値計算やデータ処理を行うためには、これらの文の理解と正しい使い方が非常に重要です。

○NUMERIC文とは

NUMERIC文は、COBOLにおける基本的な数値データ型です。

このデータ型は、整数または小数点を含む数値を保持するために使用されます。

NUMERIC文には、さまざまな形式があり、その使用方法はプログラムの要件に応じて異なります。

例えば、金額の計算や統計データの分析など、数値を扱う多くのビジネスアプリケーションにおいて重要な役割を果たします。

○NUMERIC文のデータ型

COBOLのNUMERIC文には主に次のようなデータ型があります。

  • INTEGER:整数を表すデータ型です。小数点以下の数値は保持しません。
  • DECIMAL:小数点を含む数値を表すデータ型です。金融計算など、精度が求められる処理に適しています。
  • COMP-3:COBOL独自の圧縮数値データ型です。メモリの節約に役立ち、大量の数値データを扱う場合に有効です。

これらのデータ型を正しく使用することで、COBOLプログラムは効率的かつ正確な数値処理を行うことができます。

特に、金融や会計などの分野では、正確な数値計算が不可欠であり、これらのデータ型の理解と適用が極めて重要になります。

●NUMERIC文の使い方

COBOLにおけるNUMERIC文の使い方を理解することは、効率的で正確なプログラムを書く上で非常に重要です。

NUMERIC文を使用することで、数値データの演算、フォーマット変更、データ処理などが可能になります。

ここでは、基本的な数値計算から始めて、条件判断やループ処理に至るまでの具体的な使用例を紹介します。

○サンプルコード1:基本的な数値計算

COBOLにおける基本的な数値計算は、NUMERIC文を使用して行います。

下記のサンプルコードは、簡単な加算処理を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. NUMERIC-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM1 PIC 9(4) VALUE 1234.
       01 NUM2 PIC 9(4) VALUE 5678.
       01 RESULT PIC 9(5).
       PROCEDURE DIVISION.
           ADD NUM1 TO NUM2 GIVING RESULT.
           DISPLAY "結果: " RESULT.
       STOP RUN.

このコードでは、NUM1とNUM2という二つの数値を加算し、その結果をRESULT変数に格納しています。

NUMERIC文の「PIC 9(4)」は4桁の数値を扱うことを意味し、ここでは1234と5678を加算しています。

実行結果は「結果: 6912」と表示されます。

○サンプルコード2:条件判断とループ処理

条件判断とループ処理は、プログラムの流れを制御する上で不可欠です。

下記のサンプルコードでは、簡単なループと条件判断を使用しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CONDITION-LOOP-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 COUNTER PIC 9(2) VALUE 1.
       PROCEDURE DIVISION.
           PERFORM UNTIL COUNTER > 10
               DISPLAY "ループ回数: " COUNTER
               ADD 1 TO COUNTER
           END-PERFORM.
       STOP RUN.

このプログラムでは、「COUNTER」変数を使用してループを制御しています。

COUNTERが10より大きくなるまで、ループ内の処理が繰り返されます。

各ループの繰り返しでCOUNTERに1を加算し、その値を画面に表示しています。

このようにNUMERIC文を利用することで、数値のカウントや条件に基づくループ処理が可能になります。

●NUMERIC文の応用例

COBOLのNUMERIC文は、基本的な数値計算から複雑なビジネスロジックの実装まで、幅広い応用が可能です。

特に金融計算やデータベースへのデータ登録など、実務で頻繁に遭遇するタスクにおいてその真価を発揮します。

ここでは、これらの応用例として、金融計算とデータベースへのデータ登録に焦点を当てたサンプルコードを交えて解説します。

○サンプルコード3:金融計算の実装

金融計算では、金額の精度と処理の正確性が求められます。

下記のサンプルコードは、単純な利息計算を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. FINANCE-CALC.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 PRINCIPAL PIC 9(7)V99 VALUE 100000.00.
       01 RATE PIC V9(3) VALUE 0.025.
       01 TIME PIC 9(2) VALUE 3.
       01 INTEREST PIC 9(7)V99.
       PROCEDURE DIVISION.
           COMPUTE INTEREST = PRINCIPAL * RATE * TIME.
           DISPLAY "計算された利息: " INTEREST.
       STOP RUN.

このコードでは、元本(PRINCIPAL)、利率(RATE)、期間(TIME)を使用して利息(INTEREST)を計算しています。

NUMERIC文の「9(7)V99」は、7桁の整数部と2桁の小数部を持つ数値を表し、金融計算に適しています。

計算された利息は画面に表示されます。

○サンプルコード4:データベースへのデータ登録

COBOLはデータベースとの連携も得意としています。

下記のサンプルコードは、データベースへの単純なデータ登録処理を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. DB-INSERT.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT".
       DATA DIVISION.
       FILE SECTION.
       FD CUSTOMER-FILE.
       01 CUSTOMER-RECORD.
           05 CUSTOMER-ID PIC 9(5).
           05 CUSTOMER-NAME PIC X(30).
       WORKING-STORAGE SECTION.
       01 WS-CUSTOMER-ID PIC 9(5) VALUE 12345.
       01 WS-CUSTOMER-NAME PIC X(30) VALUE "山田太郎".
       PROCEDURE DIVISION.
           OPEN OUTPUT CUSTOMER-FILE.
           MOVE WS-CUSTOMER-ID TO CUSTOMER-ID.
           MOVE WS-CUSTOMER-NAME TO CUSTOMER-NAME.
           WRITE CUSTOMER-RECORD.
           CLOSE CUSTOMER-FILE.
       STOP RUN.

このプログラムでは、顧客IDと顧客名をCUSTOMER.DATファイルに書き込んでいます。

ファイル処理には、OPEN、MOVE、WRITE、CLOSEの命令が使用されており、これによりデータの登録が行われます。

COBOLはこのようなファイル操作を簡潔に記述できるため、データベースへのデータ登録などの業務に有効です。

●NUMERIC文の注意点と対処法

COBOLでNUMERIC文を使用する際には、いくつかの重要な注意点があります。

これらの注意点を理解し、適切な対処法を知ることで、より堅牢で信頼性の高いプログラムを作成することができます。

特に、数値オーバーフローと精度の問題は、NUMERIC文を使用する上で特に留意すべき点です。

○数値オーバーフローとその対策

数値オーバーフローは、変数が保持できる最大値を超えた場合に発生します。

これを避けるためには、変数のサイズを適切に設定することが重要です。

また、計算結果が想定外の大きな値にならないように、事前にチェックを行うことも効果的です。

下記のサンプルコードは、オーバーフローをチェックする方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. OVERFLOW-CHECK.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM1 PIC 9(4) VALUE 9999.
       01 NUM2 PIC 9(4) VALUE 1.
       01 RESULT PIC 9(4).
       01 STATUS-CODE PIC X.
       PROCEDURE DIVISION.
           ADD NUM1 TO NUM2 GIVING RESULT ON SIZE ERROR MOVE 'E' TO STATUS-CODE.
           IF STATUS-CODE = 'E'
               DISPLAY "オーバーフローが発生しました。"
           ELSE
               DISPLAY "計算結果: " RESULT.
       STOP RUN.

このプログラムでは、加算処理に「ON SIZE ERROR」節を使用しています。

オーバーフローが発生した場合、STATUS-CODEに’E’がセットされ、適切なメッセージが表示されます。

○精度の問題と対処法

NUMERIC文を使用する際には、特に小数点を含む計算で精度の問題が発生する可能性があります。

これを防ぐためには、十分な桁数を持つデータ型を選択することが重要です。

また、計算の過程での丸め誤差にも注意が必要です。

下記のサンプルコードは、精度を確保するための方法を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PRECISION-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM1 PIC 9(7)V9(2) VALUE 1234567.89.
       01 NUM2 PIC 9(7)V9(2) VALUE 0.11.
       01 RESULT PIC 9(7)V9(2).
       PROCEDURE DIVISION.
           COMPUTE RESULT = NUM1 + NUM2.
           DISPLAY "計算結果: " RESULT.
       STOP RUN.

このプログラムでは、NUM1とNUM2の計算に十分な桁数を持つNUMERIC文を使用しています。

これにより、計算結果の精度を高めることができます。

●NUMERIC文のカスタマイズ方法

COBOLのNUMERIC文は、ユーザー定義関数や組み込み関数と連携することで、さらに高度なカスタマイズが可能です。

これにより、特定のビジネスロジックや複雑な数値処理を効率的に実装することができます。

ここでは、ユーザー定義関数の利用と組み込み関数との連携に焦点を当てたサンプルコードを紹介します。

○サンプルコード5:ユーザー定義関数の利用

ユーザー定義関数を利用することで、繰り返し使用するロジックをモジュール化し、プログラムの可読性と再利用性を高めることができます。

下記のサンプルコードは、簡単なユーザー定義関数の例を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CUSTOM-FUNC-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM PIC 9(4) VALUE 1234.
       01 RESULT PIC 9(4).
       PROCEDURE DIVISION.
           PERFORM MULTIPLY-BY-TWO USING NUM GIVING RESULT.
           DISPLAY "結果: " RESULT.
           STOP RUN.
       MULTIPLY-BY-TWO SECTION.
       MULTIPLY-BY-TWO-PROC.
           MULTIPLY NUM BY 2 GIVING RESULT.
           EXIT SECTION.

このプログラムでは、「MULTIPLY-BY-TWO」セクションにユーザー定義関数を作成し、数値を2倍にする処理を記述しています。

この関数は、主処理から呼び出すことができ、コードの重複を避けることができます。

○サンプルコード6:組み込み関数との連携

COBOLには多くの組み込み関数があり、これらをNUMERIC文と連携させることで、複雑な計算やデータ処理を行うことができます。

下記のサンプルコードは、組み込み関数を使用した例を表しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. BUILTIN-FUNC-DEMO.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NUM PIC 9(4)V99 VALUE 1234.56.
       01 ROUNDED-NUM PIC 9(4).
       PROCEDURE DIVISION.
           COMPUTE ROUNDED-NUM = FUNCTION ROUND(NUM).
           DISPLAY "四捨五入された数値: " ROUNDED-NUM.
       STOP RUN.

このプログラムでは、「FUNCTION ROUND」を使用してNUMERIC変数の数値を四捨五入しています。

組み込み関数を使用することで、より複雑な数値処理を簡潔に記述することが可能になります。

まとめ

この記事を通じて、COBOLのNUMERIC文の基礎から応用、注意点、そしてカスタマイズ方法までを詳細に解説しました。

COBOLは長い歴史を持つプログラミング言語であり、現在でも多くのビジネスシステムで広く使われています。

特にNUMERIC文は、COBOLにおける数値データの処理において中心的な役割を果たします。

COBOLは今日でも多くの企業システムで活用されており、特にNUMERIC文のような基本的な要素は、効率的で信頼性の高いプログラムを作成する上で欠かせません。

この記事が、COBOL初心者やこれから学ぼうとしている方々にとって、実用的なガイドとなれば幸いです。

プログラミングの基礎を固め、日々の業務や新たなプロジェクトに活かしていただければと思います。