こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

乱数を発生させて確率を求める

さいころを2つ振って両方とも1の出る確率、同じ目が出る確率を求めるプログラムを作りたいのですが、初心者なのでまったくわかりません。誰か教えてください、お願いします。

投稿日時 - 2005-06-05 18:43:42

QNo.1430993

すぐに回答ほしいです

質問者が選んだベストアンサー

Public Sub test()
Dim 試行回数, 両方1, 同じ目
Dim dice1, dice2
Randomize ' 乱数発生ルーチンを初期化します。

同じ目 = 0
両方1 = 0

For 試行回数 = 1 To 10000 '1万回試してみる
dice1 = dice() '1個目のサイコロ
dice2 = dice() '2個目のサイコロ
If dice1 = dice2 Then '同じ目が出た
同じ目 = 同じ目 + 1 '同じ目がでたことをカウントして記録
If dice1 = 1 Then 両方1 = 両方1 + 1 '両方1がでたことをカウントして記録
End If
Next
MsgBox "同じ目が出た割合:" & 同じ目 / 10000, , "同じ目が出た割合"
MsgBox "両方1が出た割合:" & 両方1 / 10000, , "両方1が出た割合"

End Sub
Function dice() As Integer
dice = Int((6 * Rnd) + 1) ' 1 から 6 までの乱数を発生させる
End Function
'------------------------------------------------
って感じですかね。
やってみたところ
同じ目:1.167
両方1:0.0288
になりました。
理論的には、
同じ目:1.16666…(1/6)
両方1:0.02777…(1/36)
なので
実験結果としては、両方1が出るのが若干大きくなりました。
こういうことは、使用する乱数(の良さ)に依るところもあるので、まあ、なんとも言えないですけど。
試行回数は、適当に大きくしたりしてみて下さい。

投稿日時 - 2005-06-08 15:31:37

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Randomize ' 乱数発生ルーチンを初期化します。
しておいて、
function dice() as Integer
dice=Int((6 * Rnd) + 1) ' 1 から 6 までの乱数を発生させます。
end function

みたいにしておいて
適当な(かなりの回数)回数diceを呼び出し
試行回数と求める条件の成立した回数を数えて
確率=成立回数/試行回数
で求められます。

投稿日時 - 2005-06-05 19:18:26

補足

すいません、ほんとに初心者なのでdiceの呼び出しかた、条件の成立した回数の数え方がわかりません。具体的にプログラムを教えてもらえませんか?

投稿日時 - 2005-06-07 21:04:48

あなたにオススメの質問