COBOL/PERFORMステートメント


通常、命令は記述された順番に実行されていきますが、同じ処理を繰り返し実行したり、他の処理へ制御を移すためにPERFORM命令を使用します。
 
【一般的な記述】
 
PERFORM 「手続き名・セクション名」
「VARYING 項目名 FROM 初期値【数字常数・項目名】 BY 増減値【数字常数・項目名】」
「UNTIL 条件式」
 
①手続き名・セクション名
制御を渡す手続き名を記述する。
 
②VARYING
繰り返しの条件を記述します。
 
③UNTIL
繰り返し処理を終了する条件を記述します。
 
【使用例1】
 
以下は、PERFORM命令を使用したプログラムの例です。
1から5までの合計値を計算する処理を、手続き名を使用しないで記述した例です。
 
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE07.
*PERFORM(条件分岐)命令を使用した例
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
*
01  WORK-AREA.
03  KAISUU  PIC 9(02).
03  GOUKEI  PIC 9(02).
PROCEDURE DIVISION.
MAIN.
MOVE ZERO TO GOUKEI.
*1から5の合計値を計算する
PERFORM
VARYING KAISUU FROM 1 BY 1
UNTIL   KAISUU > 5
COMPUTE GOUKEI = GOUKEI + KAISUU
END-PERFORM.
DISPLAY “1から5の合計値は”  GOUKEI “です。”.
STOP RUN.
 
【解説】
この処理では、PERFORMからEND-PERFORMを繰り返し実行します。
VARYING KAISUU FROM 1 BY 1
KAISUUの初期値を1から始めて、繰り返す毎に1づつカウントアップする記述です。
UNTIL KAISUU > 5
KAISUUが5以上になった場合、繰り返しを終了する記述です。
COMPUTE GOUKEI = GOUKEI + KAISUU
GOUKEIとKAISUUを加算して、GOUKEIに格納する記述です。
 
1回目の実行前は、GOUKEI:00 KAISUU:01 実行後は、GOUKEI:01 KAISUU:01
2回目の実行前は、GOUKEI:01 KAISUU:02 実行後は、GOUKEI:03 KAISUU:02
3回目の実行前は、GOUKEI:03 KAISUU:03 実行後は、GOUKEI:06 KAISUU:03
4回目の実行前は、GOUKEI:06 KAISUU:04 実行後は、GOUKEI:10 KAISUU:04
5回目の実行前は、GOUKEI:10 KAISUU:05 実行後は、GOUKEI:15 KAISUU:05
6回目にKAISUUが6になるため繰り返し処理を終了してEND-PERFORMの次の命令を実行します。
その結果、画面に「1から5の合計値は15です。」と表示されます。
 
【使用例2】
 
次に同じ処理を、手続き名を使用して記述した例です。
 
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE07.
*PERFORM(条件分岐)命令を使用した例
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
*
01  WORK-AREA.
03  KAISUU  PIC 9(02).
03  GOUKEI  PIC 9(02).
PROCEDURE DIVISION.
MAIN.
MOVE ZERO TO GOUKEI.
*1から5の合計値を計算する
PERFORM KEISAN
VARYING KAISUU FROM 1 BY 1
UNTIL   KAISUU > 5
END-PERFORM.
DISPLAY “1から5の合計値は”  GOUKEI “です。”.
STOP RUN.
KEISAN.
COMPUTE GOUKEI = GOUKEI + KAISUU
KEISAN-END,
EXIT.
 
【解説】
使用例2では、PERFORM KEISANと記述すると、KEISANに制御が移って、COMPUTE GOUKEI = GOUKEI + KAISUUが実行されます。
繰り返しの終了条件、KAISUUが5を超えるまで、繰り返されます。
結果は、使用例1と同じになります。
ここでは、KEISANのなかで、COMPUTE命令1つだけですが、もっと多くの命令を記述する場合は、このように記述するほうがわかりやすくなります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です