これまでのまとめ
本日のお品書き
ついに、ついに来ましたCOBOL。(いまさらですがFORTRANとかをやってもよかったですねぇ…)
FizzBuzz
- ドキュメントを探すところから辛かった…。新しくCOBOLの門を叩く人はどこから学んだら良いのだ…。
- Qiitaさん、コードエリアCOBOL非対応じゃないですかーやだー!
IDENTIFICATION DIVISION.
PROGRAM-ID. FIZZBUZZ.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CNT PICTURE 9(3) VALUE 0.
01 PCNT PICTURE Z(2)9 VALUE 0.
01 FIZZ PICTURE 9(01) VALUE 0.
01 BUZZ PICTURE 0(01) VALUE 0.
PROCEDURE DIVISION.
PERFORM 100 TIMES
ADD 1 TO CNT
COMPUTE FIZZ = FUNCTION MOD(CNT 3)
COMPUTE BUZZ = FUNCTION MOD(CNT 5)
IF FIZZ = 0 AND BUZZ = 0 THEN
DISPLAY "FizzBuzz"
ELSE IF FIZZ = 0 THEN
DISPLAY "Fizz"
ELSE IF BUZZ = 0 then
DISPLAY "Buzz"
ELSE
* 3桁未満の場合に0埋めせずに表示したい
* Z(2)9型に詰め替えると0埋めをスペースに変えてくれる
* TRIMを使ってスペースを除去
MOVE CNT TO PCNT
DISPLAY FUNCTION TRIM(PCNT)
END-IF
END-PERFORM.
STOP RUN.
- 書いてあること自体はぱっとわかりますね。シンプルな記法です。
- 1~6カラムが一連番号領域、7カラムが標識領域、8~11カラムがA領域、12~72カラムがB領域
- 一連番号(000100など)は省略した
- 標識領域はコメントなどを表す部分。*によってコメントを記入した。
- 3の倍数でも5の倍数でも無い時に数字を表示させたいが、何も工夫しないと「001」のように0埋めされてしまう。そのため値が無いときは空白になるZ型を使い、変数を入れ替えている。最後に空白を
TRIM
関数によって除去している。
おまけ:実行方法
sudo apt-get gnucobol
# edit fizzbuzz.cob
cobc -x fizzbuzz.cob && ./fizzbuzz