COBOL入門 Mission4-3

処 理 内 容 PROGRAM-ID 難易度 言語
テーブル処理(2次元) TBL010 1 COBOL
1:処理図
2:処理概要

[TBL000の条件変更]
ニ次元テーブルに値をセットしながら表示する

ニ次元テーブルとは?ボードに注目!!!

2次元テーブルでは添え字が2つ必要です
  (添え字の意味を好く理解して下さい)
           
2次元テーブルの領域定義について

  OPTION  《TBL01A》  計算だけを先に全部終わってから表示する
(テーブルに1〜100まで値を入れてから)

5:その他

※テーブル処理はとても大切な所なので確実に理解しておく必要があります。
**********  ( 二次元テーブル )  **********

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL010.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  I                      PIC 9(02).
 01  J                      PIC 9(02).
     03  WCNT               PIC 9(05) VALUE 0.
***** テーブル領域(二次元) *****
 01  CNT-AREAS.
     03  CNTA  OCCURS 10.
*              ^^^^^^^^^
         05  CNT  OCCURS 10 PIC 9(05)B(02).
*                 ^^^^^^^^^
*            (二次元テーブルの領域定義は OCCURS  OCCURS となる)

 PROCEDURE                  DIVISION.
     PERFORM  VARYING  J  FROM  1  BY  1  UNTIL  J  >  10
*    ^^^^^^^  ^^^^^^^
*        PERFORM  VARYING  I  FROM  1  BY  1  UNTIL  I  >  10
*        ^^^^^^^  ^^^^^^^
             ADD  1  TO  WCNT
             MOVE  WCNT  TO  CNT  (J I)
*                           [J行 の I番目]
         END-PERFORM
*        ^^^^^^^^^^^
         DISPLAY  CNTA (J)
     END-PERFORM
*    ^^^^^^^^^^^
     STOP  RUN.

              [ TBL010 処理結果画面]

 00001  00002  00003  00004  00005  00006  00007  00008  00009  00010
 00011  00012  00013  00014  00015  00016  00017  00018  00019  00020
 00021  00022  00023  00024  00025  00026  00027  00028  00029  00030
 00031  00032  00033  00034  00035  00036  00037  00038  00039  00040
 00041  00042  00043  00044  00045  00046  00047  00048  00049  00050
 00051  00052  00053  00054  00055  00056  00057  00058  00059  00060
 00061  00062  00063  00064  00065  00066  00067  00068  00069  00070
 00071  00072  00073  00074  00075  00076  00077  00078  00079  00080
 00081  00082  00083  00084  00085  00086  00087  00088  00089  00090
 00091  00092  00093  00094  00095  00096  00097  00098  00099  00100

先に値をテーブルにセットして表示する場合

**********  テーブルセットと表示を分ける  **********

* [ 初めに 1〜100 までの値を テーブルにセットしてから 表示する ]

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL01A.
*
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  I                      PIC 9(02).
 01  J                      PIC 9(02).
 01  WCNT               PIC 9(05) VALUE 0.
 01  CNT-AREAS.
     03  CNTA  OCCURS  10.
         05  CNTB  OCCURS  10.
             07  CNT  PIC  9(05)B(02).
*
 PROCEDURE                  DIVISION.
*    *****  テーブルセット (二次元処理)  *****
     DISPLAY  "!!! TBL01A  STARTED !!!"
     PERFORM  VARYING  J  FROM  1  BY  1  UNTIL  J  >  10
         PERFORM  VARYING  I  FROM  1  BY  1  UNTIL  I  >  10
             ADD  1  TO  WCNT
             MOVE  WCNT  TO  CNT  (J I)
         END-PERFORM
     END-PERFORM
     DISPLAY  "*** TABLE-SET-END ***"

*    *****  テーブル表示 (一次元処理)  *****
     PERFORM  VARYING  J  FROM 1  BY  1  UNTIL  J  >  10
         DISPLAY  CNTA (J)
     END-PERFORM
     DISPLAY  "!!! TBL01A ENDED !!!"
     STOP RUN.

二次元テーブル

さあ、ついに二次元テーブルです。これが理解できれば後はCOBOLプログラミングで覚えるべきことは、そう多く残っていません。またテーブルはCOBOLに限らずどんな言語でも必ず利用されています。知っていて当たり前というレベルなので考え方だけはしっかり理解していきましょう。

まず二次元とはなんでしょう?一次元は同じ変数を入れる箱が横にありました。二次元ではこれに縦の要素が加わります。

一次元テーブル
CNTCNTCNTCNT

二次元テーブル

CNTCNTCNTCNT
CNTCNTCNTCNT
CNTCNTCNTCNT

こんな感じになります。これをCOBOLで表記するとこうなります。

*> 一次元テーブル

 01 TABLE1.
    02  Y-LINE  OCCURS 4.
        03  CNT  PIC 9(05).
*> 二次元テーブル 01 TABLE2. 02 X-LINE OCCURS 3. 03 Y-LINE OCCURS 4. 04 CNT PIC 9(05).

つまり縦の繰り返し数と、横の繰り返し数を指定してあげればいいわけです。そしてその変数を取り出すときは、こんな風に記述します。

*> 一次元テーブル

       MOVE  1  TO  CNT(3)    *> 3番目に1を転送

*> ニ次元テーブル MOVE 1 TO CNT(2 3) *> 縦2行目、横3番目に1を転送

どうです?わかりますか?あとは上のプログラムのように、IとJというインデックスを利用して縦と横の場所を指定し、同じテーブル内で別々の箱に数値を次々と格納していくわけです。テーブルが三次元、四次元と増えても、階層が増えるだけで基本的には二次元となんら変わりません。


<< Back    Index    Next >>   < Top >