Machineを改造してみようその2【ビンゴを作ろう】この記事は2016年9月5日に書かれたものです。内容が古い可能性がありますのでご注意ください。Machineを改造してみようその2C言語でBINGOを作ろう!C言語でBINGOを作ろう!CUI上で動くビンゴゲームの完成目指してひっそりとプログラムの勉強を始めました。Machineを改造してみました。今回はそれを更に改良します。こちらをご覧ください。本記事は以上の開発環境を前提に説明を行います。Machineとは、ビンゴの抽選の機械です。それ前々回から聞いてるYO!!試作3号機はこんな↓感じでした。す、数字が被ってる・・・wそして、初期SEEDを変えないと抽選結果が変わらない。前回の宿題で「sample12_00.cを改造して、0~74が出て抽選を10回だけ行うBINGOMachine04.exeを作成してください。」というお題を出しました。今回はこの試作4号機をもとに、抽選時の初期SEEDが自動的に設定されるように改造します。BINGOMachine04.exeとBINGOMachine03.exeの違いは抽選回数に制限があるかどうかです。printf("抽選を開始します。ここをwhile文からfor文に変更。//キーボードからなにか入力するまで画面を一時停止する。printf("%02dが出ました。printf("抽選を終了します。0;}7行目のsrand()関数の引数を自動的に設定できれば解決ですね。そこで、引数を乱数に。初期SEEDの自動設定に乱数を使おうとすると、結局その乱数を決めるための初期SEEDが必要となります。そこで、初期SEEDを自動的に決める手軽な方法として、現在時刻を使うという手があります。time()関数で取得できます。time_t型、引数がtime_tのポインタ型となっています。time.hヘッダをインクルードすれば使えるようになります。int型)の別名定義となっていることが多いです。(ただし、環境に依ります。自分の環境でどうなっているか知りたければ、ヘッダファイルを読み解いてみるとわかります。time()関数を使ってみましょう。実行したタイミングで少しずつ値が変わります。00時00分00秒からの経過秒数です。時間がそのまま戻ってくるわけではないんですね。引数にNULLを用いていますが、代わりにtime_t型の変数のアドレスを渡すと、その変数に戻り値と同じ値を設定してくれます。今回は手軽なので戻り値を利用しました。それではこれを使って早速試作4号機を改造してみましょう。試作5号機のプログラムはこちら。printf("抽選を開始します。ここをwhile文からfor文に変更。//キーボードからなにか入力するまで画面を一時停止する。printf("%02dが出ました。printf("抽選を終了します。BINGOMachine05.c>BINGOMachine05.exe抽選を開始します。(Enterを押してください)61が出ました。(Enterを押してください)22が出ました。(Enterを押してください)これで毎回初期SEEDを設定する必要がなくなりましたね。い、イカサマできなくなったorzでも、よく見るとこれ↓何回もやってると同じ数字が被ることが。(画像はBINGOMachine03のもの)おまけ試作5号機には、抽選結果を保存したり表示したりする機能がありません。そのため、数字が被っているかどうかもわかりません。前回の宿題は、「sample12_00.cを改造して、0~74が出て抽選を10回だけ行うBINGOMachine04.exeを作成してください。解答は以下の通りです。printf("抽選を開始します。ここをwhile文からfor文に変更。//キーボードからなにか入力するまで画面を一時停止する。printf("%02dが出ました。printf("抽選を終了します。0;}実行結果※表示される数値は初期SEEDによって変わります。BINGOMachine04.exe>BINGOMachine04抽選を開始します。(Enterを押してください)61が出ました。(Enterを押してください)22が出ました。(Enterを押してください)65が出ました。(Enterを押してください)(中略)19が出ました。並べ替え(ソート)のアルゴリズムについていくつか調べてくること。あれ、今日の宿題解答例なさそうだからサボっても(ry次回はバケツソートのお話です。