読者です 読者をやめる 読者になる 読者になる

なみかみの為に

自分の為のブログ

言葉遊びから学ぶプログラミングの考え方

f:id:Namikami:20170217144751p:plain
こんにちは、なみかみ(@namikami_net)です

唐突ですが、あなたはプログラミングってやったことはありますか?

2020年に小学生の授業でプログラミングが必修になるなんて話も出ていますが、そもそも今の子の親世代だとプログラミングって何?って方々も多いと思います。

今日は英語圏で有名な言葉遊びである「Fizz Buzz」というゲームを題材にプログラミングについて考えていきましょう。

Fizz Buzz ゲームって?

ゲームの概要

Fizz Buzzゲームとは、1から順に次々と発言していき、3で割り切れる数の場合は「Fizz」と発言、5で割り切れる数の場合は「Buzz」と発言する。
ただし3でも5でも割り切れる数の場合は「Fizz Buzz」と発言するゲームのことです。


実際のゲームの流れは以下のように行われます。
1、2、Fizz、4、Buzz、Fizz、7、8、Fizz、Buzz、11、Fizz、13、14、Fizz Buzz、16、17 ......


Fizz Buzz 問題

これは余談ですが、Fizz Buzzゲームはプログラミング界隈ではかなり有名なゲームで、Fizz Buzzゲームのプログラムを作れるか?という問題が実際にプログラムが組めるかどうかが1つの指標になっていたりします。

プログラムの考え方

本来、Fizz Buzzゲームは複数人でワイワイやるゲームですが、今回プログラム化するにあたって複数人は何かと不都合があるため、ボッチで行うFizzBuzzの作り方を考えていきましょう。

問題の定義

1から30までの数字を順に画面に表示し、
3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、3と5で割り切れる場合は「Fizz Buzz」と変わりに画面に表示させること。

Fizz Buzzゲームを機械にやらせると延々に終わらない為、問題はこんな感じでいきましょう。


仕様の洗い出し

まずプログラム化するにあたってFizz Buzzゲームの仕様の洗い出しを行います。
プログラミング初心者のうちはできるだけ細かく洗い出したほうが、考えやすくなります。

・1からはじめる
・数値を加算する(30まで繰り返す)
・加算結果は3で割り切れるかをチェック
・加算結果は5で割り切れるかをチェック
・加算結果は3と5で割り切れるかをチェック
・チェックした結果、または数字を表示

ざっくり考えるとこんな感じ。

条件を組み立てる

こちらは条件を組み立て、流れ図(フローチャート)に起こしたものです。
f:id:Namikami:20170217142631p:plain

いざプログラミング

個人的にもっともポピュラーな言語であるC言語で書くとこのようになります
(注釈だらけな為、逆に読みにくい感がありますが・・)

#include <stdio.h>
int main(void) {
    int value = 1;//数値は 1
    while(value <= 30){	
    //数値 は 30を超えた ?
        if (value % 3 == 0 && value % 5 == 0) {	
        // 数値 ÷ 3 and 5 余りは共に0?
            printf("FizzBuzz,");//FizzBuzzを表示
        } else if (value % 3 == 0) {
        // 数値 ÷ 3 余りは0?
            printf("Fizz,");//Fizzを表示
        } else if (value % 5 == 0) {
        // 数値 ÷ 5 余りは0?
            printf("Buzz,");//Buzzを表示
        } else {
            printf("%d,", value);//現在の数値を表示
        }
        value++; //数値に1を加算する
    }
    return 0;
}


出力結果はこんな感じ。

1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,

最後に

FizzBuzzは基礎中の基礎ですが、繰り返し処理や複数条件判定などがあり勉強するにはもってこいの題材です。
今回は考え方の解説な為、ifとは何か?whileとは何か?みたいなことには触れていませんが、プログラミングに興味が出てきた方は調べてみることをオススメします。


今回紹介したソースコードはこちらのオンラインコンパイラなどを利用することで自分の手で実行することができます。
ideone.com