プログラマさんの入門問題ひとつの、いわゆる「Fizz-Buzz問題」について、妙に懐かしくなってしまってBASIC言語で書いてみました。
「Fizz-Buzz問題」とは、「1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。」というものらしい。このプリントって、いわゆる画面に表示しなさいってことですね。
まあ、詳しくは
にて。プログラミングの学校を出た人でも、これくらいをソラでこなせない人がいる?
高校時代以来だなあ、BASICって。
USBメモリの中で使えるフリーのBASICということで、ソフトは「99Basic」を使っています。あと、プログラム中にエラーが出るときのビープ音はどうもWindowsの警告音とは違うところから出ているみたいなので、音が迷惑じゃない環境で実行してください。
プログラム
10 A=1 20 IF A MOD 3=0 AND A MOD 5=0 THEN PRINT "FizzBuzz" : GOTO 60 30 IF A MOD 3=0 THEN PRINT "Fizz" : GOTO 60 40 IF A MOD 5=0 THEN PRINT "Buzz" : GOTO 60 50 PRINT A 60 A=A+1 70 IF A=101 THEN END 80 GOTO 20 90 END
たぶん、流れとしてはこんな感じでいいんじゃないかなあと思います。
最初に3と5の最小公倍数系=15の倍数を出させて弾いて、あとは3、5それぞれについてそれぞれの条件で表示して弾く。1増やして繰り返しながら、101になったら終わらせる。
とりあえず手元の動作確認ではそんなに不具合っぽいものは無いです。ただ、表示が速すぎて全部の数値を検証していませんが。
割り算のあまりを出す「MOD」の使い方を、最初誤って何度かSyntax Errorを出しました(あ〜、このエラーも懐かしい……)。MOD(X,Y)っていう書き方じゃないんですね、99Basicの場合。X MOD Yなんですね。その辺に手間取って20分くらいかかってしまいましたが。書き方が分かっていれば5分程度で書けたかも。
たまにこういうことをする分には楽しいです。
……あれ、よく考えたら100になったらやめるって、For-Next繰り返し構文でいいんじゃ……なんでわざわざ条件式で書いたんだろ。あと、FizzBuzzになるのって、要は15の倍数だから数式2回も使わんでも……ま、いっか(よくない)。
10 FOR A=1 TO 100 20 IF A MOD 15=0 THEN PRINT "FizzBuzz" : GOTO 60 30 IF A MOD 3=0 THEN PRINT "Fizz" : GOTO 60 40 IF A MOD 5=0 THEN PRINT "Buzz" : GOTO 60 50 PRINT A 60 NEXT A 70 END
直してみました。ちょっと短くなったなあ。