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 |
この結果をみると、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 |