| ||||||||
| ||||||||
|
さあ、これを自力で解けるでしょうか?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.
今回から、新しい記述(赤色表示)が増えています。詳しいことは、以下で述べることにします。文法や記述なんてやっていけばイヤでも覚えます。重要なのは、このプログラムを自分で理解し、自分で組めるかどうか、なのです。下の図を見て下さい。
これが今回のサンプルプログラムの内容です。
まず、この図が頭に浮かぶことが重要なのです。仕様書の要求に対して、何をするプログラムなのかを瞬時に発想する、それが大事なこと。「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のように作成します。が、詳しい説明は現段階ではしません。初めて目にする命令も多いでしょう。見比べてみて、ふーんなるほどなぁと思ってもらえば結構です。3番目に登場する部。ここにプログラム内で利用する全ての項目を記述します。入力ファイル、出力ファイルがある場合には、そのファイルのデータ情報も克明に記述しなければなりません。この部は大きく3つのSECTIONに分類できます。SECTIONとは、「節」と呼ばれ、各「部」の中に書くことができます。データ部には、以下の3つの「節」を必要に応じて記述します。
ファイルを利用する場合に記述します
アナタの自由に利用する項目を記述します
外部プログラム(サブルーチン)として利用する場合、若しくは外部より値を取り込む場合に記述します
各SECTIONなどの詳細に関しては、以下に説明、又は登場する都度に説明します。
COBOL言語では、事前に利用する項目を記述しなければなりません。WORKING-STRAGEというSECTIONには、プログラマが任意で使う項目を記述することができます。別の言いかたをすれば、変数・定数のデータ項目は必ずココに記述しなければいけません。このSECTION(節)はとても重要です。ここに何も書かないプログラムは無いと言い切ってもいいぐらい。細かなことを今の段階で説明すると混乱すると思うので、すごく大雑把に説明します。
01 CNT PIC 9(03) VALUE 0.
今回の例題で書かれている項目はこの1行だけです。では中身をバラしてみましょう。
簡単に言えば独立した項目を意味しています。
プログラマが任意でつけた名前です。今回は仕様書でCNTを利用せよと書かれていますね。
ピクチャー句(正式な記述は"PICTURE")といい、各項目に必ず記述します。
項目の種類の記述です。数字の場合は「9」、英字は「X」、日本語は「N」で表記します。かっこ内は桁数です。
バリュー値といい、初期値を設定できます。初期値は指定しなくとも構いませんが、値のない状態で処理をすると、項目の中身は保証されません。初期値がない場合は、利用する時に必ず値をクリアするか代入するように心掛けましょう。
上記のことからもこの作業領域節の項目は、独立した、CNTという名の、数字項目を、3桁、初期値ゼロで、利用します! という宣言文になります。