アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校で「1つのサイコロを振ったとき,
3以下の数字が出た場合,もう一度サイコロを振っても良いものとする.
このとき合計が6になる確率を,プログラムを利用して計算せよ」
というperlの課題が出されたのですが、さっぱりわかりません。
どなたか詳しく教えていただけませんでしょうか?

A 回答 (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文の繰り返しの数で確立を求めプリントする。


いかがでしょうか??
がんばってみてください。
    • good
    • 0
この回答へのお礼

分かりやすい説明ありがとうございます!!
こんなに早く回答が返ってくるとは思わなかったので嬉しいです(^^*
1つ1つ考えていけばよかったんですね。
なんとか完成できそうです。
本当にありがとうございました!!!

お礼日時:2009/05/26 16:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!