🧩今日の学び
・COBOLで複合計算をするときは、数式をそのまま書くのではなく、MOVE・ADD・SUBTRACTを順番に重ねて処理する
・なるおが気づいたように、元データを残したいときはTOTALのような作業用変数を使うと安全に計算できる
・係長の「COBOLは順番に命令する」という考え方が、複合計算を理解するうえでの核心になる
なるお)次は掛け算すよね?
何回か足すかってことで掛け算代わりにしないっすか…
✕100だったら、100回足せばいいじゃないすか。
大変なのはこぼるんだけでいいんすよ。俺らは寝てれば万事OKなわけで。
係長)次は掛け算じゃないからな。
な)は?
係)まだ足し算引き算で転んでるやつが掛け算とか言ってるなよ。
次は複合計算やれ。
な)へ?
係)これをCOBOLでやれ。
3 + 2 - 1
な)ええー、だって、こぼるんって、これ許してくれないっすよね…
3 + 2 - 1
COBOLで複合計算をするなら「順番に命令する」
係)考え方として、COBOLは順番に命令するってことだ。
つまり、最初に 3 を入れといてそのあと +2 して、 -1 するって考えてみろ。
TOTAL = 3 TOTAL = TOTAL + 2 TOTAL = TOTAL - 1 結果 4
な)とりあえず変数までいっちゃうとして…
1INDENTIFICATION DIVISION. 2PROGRAM-ID
… ちょっと気になったんすけど、PROGRAM-IDってなんでもいいんすか?
PROGRAM-ID はファイル名とは別の「プログラム名」
係)まぁそうだな。
PROGRAM-ID は、ざっくり言うとこのプログラムの名前となる。例えば、「TEST」とかだ。
1PROGRAM-ID. TEST.
「なんでもいい」ってのは、文法的にはある程度自由というところだな。
な)でもなんでファイル名あるのに、名前が必要なんす?
係)ファイル名と同じじゃないからだ。
PROGRAM-IDはCOBOLの中でのプログラム名であり、ファイル名はOS上のファイル名だから別物だぞ。
別物だが、名前は揃えておいたほうが無難ではあるな。
な)ほー。ではNARUOLOVEということで。
係)お前は、なにを聞いてたんだよ!
な)すぐ怒るんだから…
1IDENTIFICATION DIVISION. 2PROGRAM-ID. TEST.
として、変数までいっちゃおうと。
1DATA DIVISION. 2WORKING-STORAGE SECTION.
係長、変数の初期値って設定できますよね?
係)あぁ、VALUE 初期値という書き方だな。
な)んだば、こうっすね。
101 A PIC 9(3) VALUE 3.
んで、こうと。
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 TOとSUBTRACTを連続するみたいな?
1ADD B TO A. 2SUBTRACT C FROM A. 3DISPLAY A.
これでいいかな。
あ、でも、ADD A TO Bにしちゃうと、初期値が変わっちゃうか…
初期値を残すなら、作業用変数を作る
係)そうだな。初期値を変えてもいいなら、ありとも言える。
初期値を残すのであれば、作業用変数(TOTALなど)を作っておくといいな。
な)となると、一つ変数(TOTAL)追加しておけば良いわけだと。
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)
ってことねこれ!てかめんどくさくねこれ!
係)なんかいったか?
な)言ってませんって…。
んでま、あとは計算するよう書いていけばいいわけで…と。
1PROCEDURE DIVISION. 2 MOVE A TO TOTAL. 3 ADD B TO TOTAL. 4 SUBTRACT C FROM TOTAL.
ってところかしら?
係)それを表示しろ。
な)あ、そっすね。
係長は想像力が無いから目に見える形にしないとっと…
1PROCEDURE DIVISION. 2 MOVE A TO TOTAL. 3 ADD B TO TOTAL. 4 SUBTRACT C FROM TOTAL. 5 DISPLAY TOTAL. 6 STOP RUN.
これでいっすよね!
見えちゃいますよね!
係)実行しろって。
な)あ、はい…
合体させてっと、
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 のような複合計算をするときは、
ADD 2 TO TOTAL. SUBTRACT 1 FROM TOTAL.
のように、順番に命令を重ねるのが基本。
最初の値は
MOVE A TO TOTAL.
のように作業用変数へ移してから計算すると、元データを壊さずに済む。
おむすび
な)ほへ?COBOLって式を書くというより箱を順番に更新するようなもんすね。
こぼるんは融通がきかないけど、ちゃんと指示すれば、間違わない感じっすねー。
係)さっきからなんだよ「こぼるん」って…
な)え、こぼるんはこぼるんすよ。一生懸命が売りの生徒会長。一生懸命すぎてちょいうざく、女子からあんまり好かれてない。
係)あのな…。
なんで擬人化するんだよ…。
な)愛着が湧くからみんなから愛されまくりますよ!
係)お前と違って、愛されるわけだな。
な)え!?
係長のワンポイント
COBOLは3 + 2 - 1をそのまま一気に解く言語じゃない。
箱に値を入れ、順番に更新して結果へ運ぶ言語だ。
だから複合計算では、TOTALのような作業用変数が効いてくる。
元の値を残したいなら、まずMOVEしてからADD / SUBTRACTする。
COBOLは式を書くというより、処理の手順を書く言語だ。


コメント