LoginSignup
0
0

More than 1 year has passed since last update.

多言語FizzBuzzチャレンジ24日目:COBOL

Last updated at Posted at 2022-12-23

これまでのまとめ

本日のお品書き

ついに、ついに来ました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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0