FizzBuzz
IDENTIFICATION DIVISION. PROGRAM-ID. FizzBuzz. DATA DIVISION. WORKING-STORAGE SECTION. 01 CNT PIC 9(03) VALUE 0. 01 MOD PIC 9(01) VALUE 0. 01 TMP PIC 9(01) VALUE 0. 01 FIZ PIC X(05) VALUE "". 01 BUZ PIC X(05) VALUE "". 01 STR PIC X(08) VALUE "". PROCEDURE DIVISION. PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 100 DIVIDE CNT BY 3 GIVING TMP REMAINDER MOD IF MOD = 0 THEN MOVE "Fizz#" TO FIZ ELSE MOVE "#" TO FIZ END-IF DIVIDE CNT BY 5 GIVING TMP REMAINDER MOD IF MOD = 0 THEN MOVE "Buzz#" TO BUZ ELSE MOVE "#" TO BUZ END-IF MOVE "" TO STR STRING FIZ BUZ DELIMITED BY "#" INTO STR IF STR = "" THEN DISPLAY CNT ELSE DISPLAY STR END-IF END-PERFORM STOP RUN.
おぼえがき
変数宣言中の9(03)は数値型(=9)で3桁分確保、X(05)は文字型(=X)で5桁分確保という意味。
変数の代入にはMOVEを使い、=は同値判定に使う。
剰余計算は割り算の命令のオプション機能(REMAINDER)で求めた。
各変数FIZ,BUZについて#が来るまでをSTRにコピーする機能(DELIMITED BY)を文字列結合の代わりに使った。
とりあえずこれでCOBOLは大体わかった、ということにしてしまおう(笑)
止揚流プログラム講座(COBOL編)
http://hp.vector.co.jp/authors/VA003991/kouza/beginner/kouza_cobol.html
言語別対応表
http://hp.vector.co.jp/authors/VA003991/kouza/beginner/kouza_omake.html
ASM BASIC C C++ COBOL Perl
比較表もあり、概要レベルとしてのまとめかたがいい感じ