SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

COBOLプログラミング

COBOLプログラミング 基本編

第2回 OpenCOBOLを使用したCOBOL基本プログラミングの解説

  • X ポスト
  • このエントリーをはてなブックマークに追加

基本的なCOBOLの文法(3)~PROCEDURE DIVISION 1/2~

D.PROCEDURE DIVISION 1/2

 手続き部と呼ばれる部分です。DATA DIVISIONの次に記述します。節、段落、命令を記述していきます。条件により処理を分岐したり、指定した節、段落へ処理の制御を移すこともできますし、指定した条件により節および段落間を実行することもできます。

値の設定

 データ部で定義したデータ項目に値を設定できます。設定するには、代入かMOVE文を使用します。

代入で値を設定する
001010      CNT = 1.
MOVE文で値を設定する
001020      MOVE 1 TO CNT.
足し算

 足し算の命令語は「ADD」です。構文は次のとおりです。

ADD文の構文
(1) ADD 要素1 TO 要素2.
(2) ADD 要素1 TO 要素2 GIVING 要素3.
(3) ADD CORRESPONDING 要素1 TO 要素2.
  • (1)は要素1の合計値を要素2に加算します。要素2が複数の要素の場合、左の要素から順に値を設定していきます。以下に例を示します。
  • (1)ADD 要素1 TO 要素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.
    
  • (2)は要素1の合計値と要素2を加算し、結果を要素3に格納します。要素3が複数の要素の場合、左の要素から順に値を設定していきます。なお、要素2は複数指定することはできません。また、要素2の内容は計算前後で値は同じです。以下に例を示します。
  • (2)ADD 要素1 TO 要素2 GIVING 要素3.の例
    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.
    
  • (3)は要素1に従属するデータ項目と要素2に従属するデータ項目のうち、修飾語が同じもの同士の加算を行い、要素2のデータ項目に値を設定します。以下に例を示します。
  • (3)ADD CORRESPONDING 要素1 TO 要素2.の例
    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.
    
    上記の場合は、ロジック実行後にBのTEST1には2が、BのTEST2には3が、BのTEST4はそのまま1が、BのTEST6には7が設定されます(3)は便利と言えば便利な機能ですが、それぞれの要素について(1)の構文で記述できますし、上記例のようにそれぞれの従属データ項目が同じでない場合は誤解の元になりますので、使用を控えた方が無難です。
引き算

 引き算の命令語は「SUBTRACT」です。構文は次のとおりです。

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」です。構文は次のとおりです。

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」です。事務処理用の言語だけあり、商と剰余を同時に求めることができます。構文は次のとおりです。

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の構文
COMPUTE 要素1 = 算術式.

 要素1には複数の要素を指定できます。複数の場合は、算術式で計算した結果を、左の要素から順に値を設定していきます。以下に例を示します。

COMPUTE文の例
002010      COMPUTE CNT-A = (CNT-B + CNT-C) * CNT-D / 4.
002020      COMPUTE TEST-1 TEST-2 = (TEST-3 - TEST-4) / TEST-5 * 2.

 好みにもよると思いますが、日本人的には、どちらかと言うと前述した英語表記型よりも、ここで説明した計算式方式型の方が見やすいと感じると思います。

次のページ
基本的なCOBOLの文法(4)~PROCEDURE DIVISION 2/2~

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
COBOLプログラミング連載記事一覧

もっと読む

この記事の著者

布施 榮一(ふせえいいち)

布施加工有限会社 代表取締役布施加工って何しているとこなの??実はIT屋さんだったりします(笑)Linux基盤各種サービスの設計構築およびコンサルティングをやっています。ブログもちょこちょこっと書いてます。Alinous-Core 正規販売代理店

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2303 2008/06/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング