- ベストアンサー
N88-Basic プログラムについて(分岐の確率)
こんばんわ。 basicに関する質問です。現在下記のようなプログラムを作成しようとしています A地点からB地点まで行くのには、a.b.c.d.e.fの6つのルートがあります。男の子が ルートaを選ぶ確率は20% ルートbを選ぶ確立は15% ルートcを選ぶ確立は10% ルートdを選ぶ確立は 5% ルートeを選ぶ確立は20% ルートfを選ぶ確立は30% とします。同じように、B地点→C地点、C地点→D地点…と6ブロックあるとし、各ルートも同じように選ぶにはパーセントがあるとします。 男の子がたどったルートを表示し、そのルートを選んだ確率を表示する といったプログラムなのですが、そのルートを選ぶための確立をどのようにプログラムするのかわかりません。説明が簡単でわかりにくいかもしれませんが、どなたかアドバイスをお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
乱数の使い方に関しては既に回答されているので良いでしょう。 ただし、#2の判断方法だとルート選択の確率を正しく表現できないと思います。 x=rnd(1) として、そのxに対して 0.0 ≦x<0.2 ならルートaへ 0.2 ≦x<0.35 ならルートbへ 0.35≦x<0.45 ならルートcへ 0.45≦x<0.5 ならルートdへ 0.5 ≦x<0.7 ならルートeへ 0.7 ≦x<1.0 ならルートfへ と言う風になると思います。
その他の回答 (4)
- asuca
- ベストアンサー率47% (11786/24626)
>乱数で0.6になってしまったりしたら条件に当てはまらなくなる(0.2以下ではなくなる)ので、おかしくなるのではないでしょうか? ですから、0.6の時に当てはまらないので正しいんです。20%の確率にするために0.00~1.00間での数値がでてその中の0.20間での数値がでる確率を当てはめるわけですので。 0.6が当てはまったら確率がおかしくなってしまいます。
お礼
そうでした・・・親切に一つ一つ答えていただきありがとうございました。
- asuca
- ベストアンサー率47% (11786/24626)
>0~1までの乱数を発生させるプログラムをお教え願えませんでしょうか? x=Rnd(1) で0から1までの乱数を発生させます。 ただ、プログラムの最初に RANDOMIZE VAL(MID$(TIME$,4,2))+1*VAL(MID$(TIME$,7,2)) などと入れて乱数を初期化してやらないと常に同じ結果が出てしまいます。
- asuca
- ベストアンサー率47% (11786/24626)
すみません訂正です 0.2以上だったらルートa 0.15以上だったらルートb は 0.2以下だったらルートa 0.15以下だったらルートb ですね。
補足
重ね重ね申し訳ありません。 素人質問で申し訳ないのですが、乱数で0.6になってしまったりしたら条件に当てはまらなくなる(0.2以下ではなくなる)ので、おかしくなるのではないでしょうか?
- asuca
- ベストアンサー率47% (11786/24626)
0から1までの乱数を発生させてそれをif文で 0.2以上だったらルートa 0.15以上だったらルートb というように判定してやればいいかと思います。 それを配列に入れておいて最後に配列の内容を全部かけてやればいいかと思います。
お礼
迅速なお答えありがとうございます。 プログラムの原理はわかったのですが、申し訳ないのですが0~1までの乱数を発生させるプログラムをお教え願えませんでしょうか?
補足
回答ありがとうございます。 ご指摘のように作成すると、 50 if x<0.2 then goto 100 60 if x<0.35 then goto 110 70 if x<0.45 then goto 120 80 if x<0.5 then goto 130 90 if x<0.7 then goto 140 100 if x<1.0 then goto 150 100 print "(1)" 110 print "(2)" 120 print "(3)" 130 print"(4)" 140 print"(5)" 150 print "(6)" のようでいいのでしょうか?