
※途中で戻りたい場合は、ブラウザの「戻る」機能を使ってください。
条件付ランダムでの数字を取り出す式の確認第4章で、1から43までの数字をランダムに取り出す式に誤りがあったようなので検証し、訂正したいと思います。まず、おかしいと思っていたのは、何度もファンクションキーの「F5」を押して実行を繰り返しても、1から42までの数字しか選ばれず、43が現れないことに疑問を持ったことから始まりました。 簡単なプログラムを作って、実験検証してみましょう。 ランダムに1から43マデノスウジを取り出す式を GOTO 文でループさせて、43 が出たらループから抜けて終了するが、出なければずっと繰り返すプログラムを考えた。 まずは今までどおり使ってきたリストで試してみます。 「*42」のリスト ![]() そして実行結果。 ![]() 数字の羅列を表示していき、ずっと止まらずに実行し続けます。 要するに、 43 が A にずっと代入されない = ランダムで選ぶ数字で 43 は無い。 次に先ほどのリストの「*42」の部分を「*43」にしてみました。 ![]() 実行してみました。 ![]() 43 を表示した直後にちゃんと実行を終えてます。 これで、「*43」でないといけないことが、実証されました。 6つの選んだ数字を昇順に並べる話は本流に戻り、ロト6シミュレータープログラムへ。前章でランダムで6つ数字を選んだわけですが、それを昇順に並べたいのです。 配列変数 A に代入された数字を並べ替えするのもいいのですが、メルマガの読者の方に教えていただいたアルゴリズムを使ってみました。 まずはリストを見てください。 ![]() 変数名などは一部変えてありますが、ご了承ください。 そして、この章の最初に記したように、20行では「*43」となっております。 簡単に解説しますと、配列変数をランダムに選ぶ数字の種類分用意していて、そこへ数字自体ではなく、その数字が選ばれたかチェックする為のフラグである 1 を入れています。 要するに選ばれた数字が配列の番号となり、その配列番号の要素に「選ばれた印」として 1 を代入します(代入する前は、配列宣言をする時に全て0で埋まります)。 ダブっているかどうかは、その選ばれた数字の配列番号の中身が 0 か 1 か 調べる事によってわかります。 ダブらずに6つの数字を選んだら、ループで配列変数のはじめからチェックしていき、選ばれていたら(内容が 1 だったら)その配列番号自体を表示させることによって、選ばれた数字を取り出すことが出来ます。 結構このプログラムのアルゴリズムを知った時は、感動に近いものがありました(大袈裟?)。 では、実行結果です。 ![]() きちんと昇順(小さい順)に並んでいます(涙)。 43 の数字も表示されています。 数字を選ぶアルゴリズムは解決したので、次章からはそれを使ってゲームに仕上げていきます。 |
Copyright(C) 2006. ピコピコテクノロジー All Right Reserved.