インターネット&PC120%活用:PC活用編

cobol入門
手続き部の記述(初めてのCobolプログラム)
〜画面入出力と計算



まずは、cobolプログラムの第一歩として、いよいよ手続き部の記述に入ります。
まず画面入出力(Basicのinput, printにあたるもの)そして、四則演算の簡単な説明とそれらを
使ったコードの書き方について。
Tyny Cobolを使っていますのでプログラム例は正書法ではありません。

COBOLはnaturalな英語の命令文を書くようにコーディングする、という目標に向かって生まれた
言語なので、ひとつひとつの命令文(コマンド)はまるで英語をそのまま書いているような感じですし、
文の最後には必ずピリオド[ . ]を打ちます。

1 手続き部の記述
まず、PROCEDURE DIVISION. と宣言してから、その後にプログラムのコード本体を記述します。
基本的な命令を簡単に説明します。

(1) 出力文 DISPLAY
DISPLAYは画面にデータを出力する文です。Basicのprintと似た機能です。
書式は以下の通りです。画面に出力する場合はUPON CONSOLEを省略しても構いません。
DISPLAY 変数 UPON CONSOLE .

拡張されたCOBOL(*)では、画面上の表示位置を指定する場合に、AT指定を使うことができます。
DISPLAY "Hello" AT0505 UPON CONSOLE.
5行目5桁目からHelloと表示します。
(*)Micro Focus社のCOBOLではATによる位置指定ができます。


最初のプログラムはHELLO WORLD!です。

DENTIFICATION  DIVISION.
PROGRAM-ID.     HELLO.
ENVIRONMENT     DIVISION.
DATA            DIVISION.
PROCEDURE       DIVISION.
DISPLAY 'HELLO WORLD!!'.
   STOP RUN.


階層構造のあるデータの出力
COBOLではデータを階層構造で定義できる(プログラムの記述様式「データ部」を参照)のですが、
レベル01,レベル02のデータを定義しそれらのデータ名を表示するプログラム例をみながら、データの
階層構造に関する理解を深めてみたいと思います。

01レベル(最上位)で、studentという学生を定義し、その下の02レベルで、name,height,weight を定義した
データ構造を考えます。
01 student
 |−02 name  データは10文字
 |−02 height  データは3ケタの数値
 |−02 weight データは2ケタの数値

データを格納する領域は以下のように確保されます。

student
name height weight

以下のプログラムではheightには初期値で153を入れ、weightには初期値で51を入れます。
nameにはmove文で"TARO"を入れます。(MOVE文については転記命令MOVEを参照)

IDENTIFICATION  DIVISION.
PROGRAM-ID.     TEST5.
ENVIRONMENT     DIVISION.
DATA            DIVISION.
WORKING-STORAGE SECTION.
01 student.
 02 name PIC X(10).
 02 height PIC 999 VALUE 153.
 02 weight PIC 99 VALUE 51.
PROCEDURE       DIVISION.
MOVE "TARO" TO name. 
DISPLAY name.
DISPLAY height.
DISPLAY weight.
DISPLAY student.
   STOP RUN.

さて、上のプラグラムでわかるように、データ名に対しては、01レベルのものであろうと、02レベルの下位にある
データ名(変数)であろうと、どのデータ名でもアクセスし表示することが可能です。
表示させてみると、01レベルのデータ名、下位のレベルのデータ名(変数)にCOBOLがどのようにデータを格納して
いるのかを確認することができます。

実行した結果です。最初に下位レベルのname,height,weightを表示させ、最後に01レベルのstudentの内容を表示しています。

Owner@tsuyoshi /usr/src/htcobol
$ ./test5 TARO 153 51 TARO 15351                

この結果をみると、01レベルのstudentには以下のようにデータが格納されており、
studentでアクセスすると、下位レベルのデータ名を格納されている状態のまま全て表示することがわかります。
student
name height weight
TARO 1 5 3 5 1




(2) 入力文 ACCEPT
ACCEPTはキーボードからの入力をする文です。BasicのInputと似た機能です。
書式は以下のようです。キーボードから入力する場合はFROM CONSOLEは省略しても構いません。
ACCEPT 変数 FROM CONSOLE .

標準規格COBOLにはありませんが、拡張された最近のCOBOLではAT指定で、入力位置を画面上の
任意の位置に指定することができます。
ACCEPT NUM AT0515 FROM CONSOLE .
5行目15桁目にカーソル位置を指定し、その位置からデータを入力します。

入力した数値を、そのまま画面に表示するプログラムです。

IDENTIFICATION  DIVISION.
PROGRAM-ID.     HELLO.
ENVIRONMENT     DIVISION.
DATA            DIVISION.
WORKING-STORAGE SECTION.
01 Num PIC 9.
PROCEDURE       DIVISION.
ACCEPT Num.
DISPLAY Num.
   STOP RUN.



(3) COMPUTE
COMPUTEを使って四則演算を行います。
加算 COMPUTE Z = X + Y.
減算 COMPUTE Z = X - Y.
乗算 COMPUTE X = Y * 2.
除算 COMPUTE X = Y / 2.
べき乗 COMPUTE X = Y ** 3.

算術演算子 +, -, *, /, ** や=の左右は空白を1個以上置くことになっています。

簡単なサンプルプログラム
2つのデータを入力し、足し算した結果を表示する超簡単なプログラムです。
特に説明の必要もないと思いますので、説明は省きます。

* add.cob :
IDENTIFICATION  DIVISION.
PROGRAM-ID.     ADD_program.
ENVIRONMENT     DIVISION.
DATA            DIVISION.
WORKING-STORAGE  SECTION.
01 NUM1  PIC 9999 VALUE 0.
01 NUM2  PIC 9999.
01 TOTAL  PIC 99999.
PROCEDURE       DIVISION.

 DISPLAY SPACE.
 DISPLAY '****  足し算 ****'.
 DISPLAY 'Number1:'.
 ACCEPT NUM1.
 DISPLAY 'Number2:'.
 ACCEPT NUM2.
 COMPUTE TOTAL = NUM1 + NUM2.
 DISPLAY 'TOTAL:' TOTAL.
    STOP RUN.


実行結果は以下のようになります。


Owner@tsuyoshi /usr/src/htcobol
$ ./add

**** 足し算 ****
Number1:
7
Number2:
21
TOTAL:00028

Owner@tsuyoshi /usr/src/htcobol

TopPage


inserted by FC2 system