COBOL入門 Mission2-1 カウンタの原理を理解し100回してみる

処 理 内 容 PROGRAM-ID 難易度 言語
カウントを数えて表示する CNT001 1 COBOL
1:処理図
2:処理概要

1から100までカウントしながら表示する
(加算領域に1を加算し、その都度表示)

・カウンター名には、「CNT」を利用すること
3:その他

★加算命令 [ ADD ]

    ADD 1  TO  A         *> A+1→A
    ADD  1  TO  A  B  C   *> A+1→A , B+1→B , C+1→C
    ADD  A  TO  B         *> A+B→B
    ADD  A  B  GIVING  C  *> A+B→C

★条件判定命令 [ IF ]

    IF  条件式
      THEN
          条件に合った時の命令文
    ELSE
          条件と違った時の命令文
    END-IF

 ※「THEN」は記述省略が可能

さあ、これを自力で解けるでしょうか?COBOLのお約束を知らなければ無理ですね。ではサンプルコードをみてみましょう。

 IDENTIFICATION    DIVISION.
 PROGRAM-ID.       CNT001.
 DATA              DIVISION.  データ部の宣言
 WORKING-STORAGE   SECTION.   作業領域節の宣言
 01 CNT   PIC 9(3) VALUE 0.     利用者定義語
 PROCEDURE         DIVISION.
    PERFORM 100 TIMES
        ADD 1 TO CNT
        DISPLAY "COUNT = " CNT
    END-PERFORM
    STOP RUN.

今回から、新しい記述(赤色表示)が増えています。詳しいことは、以下で述べることにします。文法や記述なんてやっていけばイヤでも覚えます。重要なのは、このプログラムを自分で理解し、自分で組めるかどうか、なのです。下の図を見て下さい。

できるCOBOLプログラミング 『図解で解説。できるシリーズ最新刊』

これが今回のサンプルプログラムの内容です。

まず、この図が頭に浮かぶことが重要なのです。仕様書の要求に対して、何をするプログラムなのかを瞬時に発想する、それが大事なこと。「1から100まで〜」、この文で繰り返し命令が必要だなということを発想します。「〜カウントしながら表示」、ここでカウンターが必要だ、加算命令、表示命令が必要だということを発想できるようになりましょう。


では次にこれをフローチャートにするとどうなるでしょうか?

できるフローチャート

今回のプログラム構造をフローチャートにしてみましょう。フローチャートとは、処理する順番に命令構造を図で記述する手法です。これを用いることによって、プログラムの内容が第三者にも解かりやすくなりますね。処理はこのような順序で流れます。実際にプログラム作成は、この条件を満たすように、組まなくてはなりません。理解できますか?

また、サンプルのプログラムは、このように書くことも可能です。※各サンプルは、フローチャートと若干流れが異なっています

* sample cnt001-1
 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                CNT001S1.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  CNT                    PIC 9(03) VALUE 0.
 PROCEDURE                  DIVISION.
 A.  ADD  1  TO  CNT
     DISPLAY  "COUNT = " CNT
     IF  CNT  =  100
         THEN  STOP RUN
         ELSE  GO  TO  A
     END-IF.
*
*** [ A は一連の命令群を表す名前で 手続き名 といいます ]
*   ( 手続き名は A領域[8カラム]から書きピリオドで終わらせます )
*sample cnt001-2
 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                CNT001S2.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  CNT                    PIC 9(03) VALUE 0.
 PROCEDURE                  DIVISION.
 A.  IF  CNT > 100
       THEN  STOP RUN
       ELSE  ADD  1  TO  CNT
             DISPLAY  "COUNT = " CNT
             GO  TO  A
     END-IF.
*sample cnt001-3
 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                CNT001S3.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  CNT                    PIC 9(03) VALUE 0.
 PROCEDURE                  DIVISION.
    PERFORM UNTIL CNT > 100
        ADD 1 TO CNT
        DISPLAY  "COUNT = " CNT
    END-PERFORM.
*sample cnt001-4
 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                CNT001S4.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  CNT                    PIC 9(03) VALUE 0.
 PROCEDURE                  DIVISION.
    PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 100
        DISPLAY  "COUNT = " CNT
    END-PERFORM.

どの書き方をしても、ちゃんと動作します。

プログラムとは、これが正解というものはありません。他人が見てすぐわかるように組むことこそが重要なのです。

もし私が作成するならば、サンプル4のように作成します。が、詳しい説明は現段階ではしません。初めて目にする命令も多いでしょう。見比べてみて、ふーんなるほどなぁと思ってもらえば結構です。
※前画面に戻る場合は、[Back space]キーが便利です  ▼メニューにジャンプ

DATA DIVISION データ部

3番目に登場する部。ここにプログラム内で利用する全ての項目を記述します。入力ファイル、出力ファイルがある場合には、そのファイルのデータ情報も克明に記述しなければなりません。この部は大きく3つのSECTIONに分類できます。SECTIONとは、「節」と呼ばれ、各「部」の中に書くことができます。データ部には、以下の3つの「節」を必要に応じて記述します。

  1. FILE SECTION. (ファイル定義 節)
    ファイルを利用する場合に記述します
  2. WORKING-STORAGE SECTION. (作業領域 節)
    アナタの自由に利用する項目を記述します
  3. LINKAGE SECTION. (外部連携 節)
    外部プログラム(サブルーチン)として利用する場合、若しくは外部より値を取り込む場合に記述します

各SECTIONなどの詳細に関しては、以下に説明、又は登場する都度に説明します。

※前画面に戻る場合は、[Back space]キーが便利です  ▼メニューにジャンプ

WORKING-STORAGE SECTION 作業領域節

COBOL言語では、事前に利用する項目を記述しなければなりません。WORKING-STRAGEというSECTIONには、プログラマが任意で使う項目を記述することができます。別の言いかたをすれば、変数・定数のデータ項目は必ずココに記述しなければいけません。このSECTION(節)はとても重要です。ここに何も書かないプログラムは無いと言い切ってもいいぐらい。細かなことを今の段階で説明すると混乱すると思うので、すごく大雑把に説明します。

 01 CNT PIC 9(03) VALUE 0.

今回の例題で書かれている項目はこの1行だけです。では中身をバラしてみましょう。

上記のことからもこの作業領域節の項目は、独立した、CNTという名の、数字項目を、3桁、初期値ゼロで、利用します! という宣言文になります。

※前画面に戻る場合は、[Back space]キーが便利です  ▼メニューにジャンプ

<< Back    Index    Next >>   < Top >