- ベストアンサー
perlで確率計算
学校で「1つのサイコロを振ったとき, 3以下の数字が出た場合,もう一度サイコロを振っても良いものとする. このとき合計が6になる確率を,プログラムを利用して計算せよ」 というperlの課題が出されたのですが、さっぱりわかりません。 どなたか詳しく教えていただけませんでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そうですねぇ。 課題ですので、調べごとをしつつがんばってみましょう^^ 下記に考えの道筋の助けになると思うことを書いてみますね。 まずは、問題を分解して考えて一つずつクリアしていきましょう。 >1つのサイコロを振ったとき さいころが登場するので、乱数をつかって1~6の数字が 出るようにするにはどうしたらようでしょうか? 見方をかえると6個の数字を乱数で再現できればよいので… 0から・・・にひと手間加えるってことでよさそうですね。 >3以下の数字が出た場合,もう一度サイコロを振っても良いものとする. どうやら、最大2回さいころを触れるようですね。 for文を使うと1回目2回目とカウントできそうですね。 ただし、2回目に行くには3以下でないといけないので for文の中にif文で3以下かそうじゃないか調べる必要がありますね。 つまり、for文の中で最初に調べた乱数を用いたサイコロを 実行して値を出してそれを判別してあげればよいと思います。 3以下ならそのままで、4以上ならfor文を抜けることを考えましょう。 >合計が6になる確率 合計がと言っているので、さいころ(乱数を用いたさいころ)を振るたびに 数値を保存する変数が必要そうですね。上で話に出たfor文の中で乱数で 作ったサイコロを振るたびに足し算してあげるとよいですね。 for文を抜けたら6以上かそうじゃないかをif文で調べると 6以上になった時の回数をしることができます。 ここまで、できたら答えは目前ですね。 上記の内容で1回(3以下が出たらもう一回振ることも含めて)のサイクルができました。 知りたい内容は、確立なので1000回とか1万回繰り返した際に実際に 何回6以上になることがあるかを調べればプログラムを使ってもとめた ことになると思うので、上記プログラムをfor文の中に収めて 1000回とか1万回繰り返してみるとある値(確立)に収束すると思うので 最後に6以上になった回数/for文で繰り返した数 で確立が出ると思います。 大筋はこんな感じ。 for(){ ←1000回/1万回と回数を増やして試してみる。 for(){ ←3以下の時もう1回振れるようにしておく。 乱数をつかってさいころを再現。 サイコロの値を足し算する。 if(){ 4以上ならfor文を抜ける } } if(){ サイコロの合計が6以上なら1カウントする。 } } サイコロの合計が6以上の回数/for文の繰り返しの数で確立を求めプリントする。 いかがでしょうか?? がんばってみてください。
お礼
分かりやすい説明ありがとうございます!! こんなに早く回答が返ってくるとは思わなかったので嬉しいです(^^* 1つ1つ考えていけばよかったんですね。 なんとか完成できそうです。 本当にありがとうございました!!!