【COBOL 書き1-4】+とーで複合計算してみよう。

🧩今日の学び
・COBOLで複合計算をするときは、数式をそのまま書くのではなく、MOVE・ADD・SUBTRACTを順番に重ねて処理する
・なるおが気づいたように、元データを残したいときはTOTALのような作業用変数を使うと安全に計算できる
・係長の「COBOLは順番に命令する」という考え方が、複合計算を理解するうえでの核心になる

なるお)次は掛け算すよね?

何回か足すかってことで掛け算代わりにしないっすか…

✕100だったら、100回足せばいいじゃないすか。

大変なのはこぼるんだけでいいんすよ。俺らは寝てれば万事OKなわけで。

係長)次は掛け算じゃないからな。

な)は?

係)まだ足し算引き算で転んでるやつが掛け算とか言ってるなよ。

次は複合計算やれ。

な)へ?

係)これをCOBOLでやれ。

💡 ポイント
3 + 2 - 1

な)ええー、だって、こぼるんって、これ許してくれないっすよね…

📝 COBOL test.cob
3 + 2 - 1

COBOLで複合計算をするなら「順番に命令する」

係)考え方として、COBOLは順番に命令するってことだ。

つまり、最初に 3 を入れといてそのあと +2 して、 -1 するって考えてみろ。

💡 ポイント
TOTAL = 3
TOTAL = TOTAL + 2
TOTAL = TOTAL - 1

結果
4

な)とりあえず変数までいっちゃうとして…

📝 COBOL test.cob
  1INDENTIFICATION DIVISION.
  2PROGRAM-ID

… ちょっと気になったんすけど、PROGRAM-IDってなんでもいいんすか?

PROGRAM-ID はファイル名とは別の「プログラム名」

係)まぁそうだな。

PROGRAM-ID は、ざっくり言うとこのプログラムの名前となる。例えば、「TEST」とかだ。

📝 COBOL test.cob
  1PROGRAM-ID. TEST.

「なんでもいい」ってのは、文法的にはある程度自由というところだな。

な)でもなんでファイル名あるのに、名前が必要なんす?

係)ファイル名と同じじゃないからだ。

PROGRAM-IDCOBOLの中でのプログラム名であり、ファイル名はOS上のファイル名だから別物だぞ。

別物だが、名前は揃えておいたほうが無難ではあるな。

な)ほー。ではNARUOLOVEということで。

係)お前は、なにを聞いてたんだよ!

な)すぐ怒るんだから…

📝 COBOL test.cob
  1IDENTIFICATION DIVISION.
  2PROGRAM-ID. TEST.

として、変数までいっちゃおうと。

📝 COBOL test.cob
  1DATA DIVISION.
  2WORKING-STORAGE SECTION.

係長、変数の初期値って設定できますよね?

係)あぁ、VALUE 初期値という書き方だな。

な)んだば、こうっすね。

📝 COBOL test.cob
  101 A PIC 9(3) VALUE 3.

んで、こうと。

📝 COBOL test.cob
  1DATA DIVISION.
  2WORKING-STORAGE SECTION.
  301 A PIC 9(3) VALUE 3.
  401 B PIC 9(3) VALUE 2.
  501 C PIC 9(3) VALUE 1.

ってところまではよさそう。

んでんで、足して引くんだから、ADD TOSUBTRACTを連続するみたいな?

📝 COBOL test.cob
  1ADD B TO A.
  2SUBTRACT C FROM A.
  3DISPLAY A.

これでいいかな。

あ、でも、ADD A TO Bにしちゃうと、初期値が変わっちゃうか…

初期値を残すなら、作業用変数を作る

係)そうだな。初期値を変えてもいいなら、ありとも言える。

初期値を残すのであれば、作業用変数(TOTALなど)を作っておくといいな。

な)となると、一つ変数(TOTAL)追加しておけば良いわけだと。

📝 COBOL test.cob
  1DATA DIVISION.
  2WORKING-STORAGE SECTION.
  301 A PIC 9(3) VALUE 3.
  401 B PIC 9(3) VALUE 2.
  501 C PIC 9(3) VALUE 1.
  601 TOTAL PIC 9(3).

ってTOTALを追加しておけば、

💡 ポイント
A(3)をTOTALにMOVEして、TOTAL(3)にB(2)をADDして、TOTAL(5)。
TOTALからC(1)をSUBTRACTしてTOTAL(4)

ってことねこれ!てかめんどくさくねこれ!

係)なんかいったか?

な)言ってませんって…。

んでま、あとは計算するよう書いていけばいいわけで…と。

📝 COBOL test.cob
  1PROCEDURE DIVISION.
  2    MOVE A TO TOTAL.
  3    ADD B TO TOTAL.
  4    SUBTRACT C FROM TOTAL.

ってところかしら?

係)それを表示しろ。

な)あ、そっすね。

係長は想像力が無いから目に見える形にしないとっと…

📝 COBOL test.cob
  1PROCEDURE DIVISION.
  2    MOVE A TO TOTAL.
  3    ADD B TO TOTAL.
  4    SUBTRACT C FROM TOTAL.
  5    DISPLAY TOTAL.
  6    STOP RUN.

これでいっすよね!

見えちゃいますよね!

係)実行しろって。

な)あ、はい…

合体させてっと、

📝 COBOL test.cob
  1IDENTIFICATION DIVISION.
  2PROGRAM-ID.TEST.
  3
  4DATA DIVISION.
  5WORKING-STORAGE SECTION.
  601 A PIC 9(3) VALUE 3.
  701 B PIC 9(3) VALUE 2.
  801 C PIC 9(3) VALUE 1.
  901 TOTAL PIC 9(3).
 10
 11PROCEDURE DIVISION.
 12    MOVE A TO TOTAL.
 13    ADD B TO TOTAL.
 14    SUBTRACT C FROM TOTAL.
 15    DISPLAY TOTAL.
 16    STOP RUN.
💻 ターミナル出力 実行結果
004

キャホー!

COBOLは「式を書く」より「箱を順番に更新する」

係)いいだろう。

COBOLはな、式をまとめて書くより、処理を順番に積むほうが自然ってことだ。

まとめるぞ。

COBOLで 3 + 2 – 1 のような複合計算をするときは、

📝 COBOL test.cob
ADD 2 TO TOTAL.
SUBTRACT 1 FROM TOTAL.

のように、順番に命令を重ねるのが基本。

最初の値は

📝 COBOL test.cob
MOVE A TO TOTAL.

のように作業用変数へ移してから計算すると、元データを壊さずに済む。

おむすび

な)ほへ?COBOLって式を書くというより箱を順番に更新するようなもんすね。

こぼるんは融通がきかないけど、ちゃんと指示すれば、間違わない感じっすねー。

係)さっきからなんだよ「こぼるん」って…

な)え、こぼるんはこぼるんすよ。一生懸命が売りの生徒会長。一生懸命すぎてちょいうざく、女子からあんまり好かれてない。

係)あのな…。

なんで擬人化するんだよ…。

な)愛着が湧くからみんなから愛されまくりますよ!

係)お前と違って、愛されるわけだな。

な)え!?

係長のワンポイント

COBOLは3 + 2 - 1をそのまま一気に解く言語じゃない。
箱に値を入れ、順番に更新して結果へ運ぶ言語だ。
だから複合計算では、TOTALのような作業用変数が効いてくる。
元の値を残したいなら、まずMOVEしてからADD / SUBTRACTする。
COBOLは式を書くというより、処理の手順を書く言語だ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA