基本的なCOBOLの文法(3)~PROCEDURE DIVISION 1/2~
D.PROCEDURE DIVISION 1/2
手続き部と呼ばれる部分です。DATA DIVISIONの次に記述します。節、段落、命令を記述していきます。条件により処理を分岐したり、指定した節、段落へ処理の制御を移すこともできますし、指定した条件により節および段落間を実行することもできます。
値の設定
データ部で定義したデータ項目に値を設定できます。設定するには、代入かMOVE文を使用します。
001010 CNT = 1.
001020 MOVE 1 TO CNT.
足し算
足し算の命令語は「ADD」です。構文は次のとおりです。
(1) ADD 要素1 TO 要素2. (2) ADD 要素1 TO 要素2 GIVING 要素3. (3) ADD CORRESPONDING 要素1 TO 要素2.
- (1)は要素1の合計値を要素2に加算します。要素2が複数の要素の場合、左の要素から順に値を設定していきます。以下に例を示します。
- (2)は要素1の合計値と要素2を加算し、結果を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。以下に例を示します。
- (3)は要素1に従属するデータ項目と要素2に従属するデータ項目のうち、修飾語が同じもの同士の加算を行い、要素2のデータ項目に値を設定します。以下に例を示します。
002010 ADD 1 TO CNT-A. 002020 ADD 1 TO CNT-B CNT-C. 002030 ADD 1 CNT-B TO CNT-C. 002040 ADD 1 CNT-B TO CNT-C CNT-D.
002010 ADD 1 TO CNT-B GIVING CNT-C. 002020 ADD 1 CNT-A TO CNT-B GIVING CNT-C. 002030 ADD 1 CNT-A TO CNT-B GIVING CNT-C CNT-D.
001010 DATA DIVISION. 001020 WORKING-STRAGE SECTION. 001030 01 A. 001040 03 TEST1 PIC 9(3) VALUE 1. 001050 03 TEST2 PIC 9(3) VALUE 2. 001060 03 TEST3 PIC 9(3) VALUE 3. 001070 03 TEST6 PIC 9(3) VALUE 6. 001080 01 B. 001040 03 TEST1 PIC 9(3) VALUE 1. 001050 03 TEST2 PIC 9(3) VALUE 1. 001060 03 TEST4 PIC 9(3) VALUE 1. 001070 03 TEST6 PIC 9(3) VALUE 1. ...(途中省略) 002010 ADD CORRESPONDING A TO B.
引き算
引き算の命令語は「SUBTRACT」です。構文は次のとおりです。
(1) SUBTRACT 要素1 FROM 要素2. (2) SUBTRACT 要素1 FROM 要素2 GIVING 要素3. (3) SUBTRACT CORRESPONDING 要素1 FROM 要素2.
基本は足し算と同様です。
- (1)は要素2から要素1の合計値を減算し、結果を要素2に格納します。要素2が複数の要素の場合、左の要素から順に値を設定していきます。
- (2)は要素2から要素1の合計値を減算し、結果を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
- (3)は要素1に従属するデータ項目と要素2に従属するデータ項目のうち、修飾語が同じもの同士で減算を行い、要素2のデータ項目に値を設定します。
掛け算
掛け算の命令語は「MULTIPLY」です。構文は次のとおりです。
(1) MULTIPLY 要素1 BY 要素2. (2) MULTIPLY 要素1 BY 要素2 GIVING 要素3.
足し算・引き算と違い、要素1は複数要素を指定できません。
- (1)は要素1に要素2を乗算し、結果を要素2に格納します。要素2が複数の要素の場合、左の要素から順に値を設定していきます。
- (2)は要素1に要素2を乗算し、結果を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
割り算
割り算の命令語は「DIVIDE」です。事務処理用の言語だけあり、商と剰余を同時に求めることができます。構文は次のとおりです。
(1) DIVIDE 要素1 INTO 要素2. (2) DIVIDE 要素1 INTO 要素2 GIVING 要素3. (3) DIVIDE 要素2 BY 要素1 GIVING 要素3. (4) DIVIDE 要素1 INTO 要素2 GIVING 要素3 REMAINDER 要素4. (5) DIVIDE 要素2 BY 要素1 GIVING 要素3 REMAINDER 要素4.
掛け算と同様で、要素1は複数要素を指定できません。
- (1)は要素2÷要素1の計算を行い、商を要素2に格納します。要素2が複数の要素の場合、左の要素から順に値を設定していきます。
- (2)は要素2÷要素1の計算を行い、商を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
- (3)は要素1÷要素2の計算を行い、商を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
- (4)は要素2÷要素1の計算を行い、商を要素3に格納し、剰余を要素4に格納します。各要素は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
- (5)は要素1÷要素2の計算を行い、商を要素3に格納し、剰余を要素4に格納します。各要素は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。
算術計算(COMPUTE文)
前項でそれぞれの四則演算について説明しました。文章そのままの内容で計算しており英語圏の人間に対してはドキュメント性が抜群です。しかし、単一の計算しか行うことができません。複雑な計算式の場合は複数行でコーディングするしかなく、冗長的な表現となり逆に見難くなってしまいます。そのため四則演算を1行で行えるよう算術計算文も用意されています。構文は次のとおりです。
COMPUTE 要素1 = 算術式.
要素1には複数の要素を指定できます。複数の場合は、算術式で計算した結果を、左の要素から順に値を設定していきます。以下に例を示します。
002010 COMPUTE CNT-A = (CNT-B + CNT-C) * CNT-D / 4. 002020 COMPUTE TEST-1 TEST-2 = (TEST-3 - TEST-4) / TEST-5 * 2.
好みにもよると思いますが、日本人的には、どちらかと言うと前述した英語表記型よりも、ここで説明した計算式方式型の方が見やすいと感じると思います。