質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

3回答

1462閲覧

VBSで確立計算のプログラムが作りたい。

Python.R

総合スコア28

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/12/25 05:22

編集2018/12/25 08:18

下記の問題の通りにコードを書くのですが、確率の理解がよくわかっていません。

##問題
10本のくじの中に当たりくじが3本入っている。
このとき、2本引いて2本とも当たりとなる確率は1/15となる。

今回、プログラム上で、このような試行をn回繰り返すことにより、
「2本引いて2本とも当たりとなった」結果が何回あったかと(c回とする)、
その割合r=c/nをそれぞれ表示するプログラムを作成せよ。
プログラムには配列を用いること。

※留意点
(1) 確率については、
・10本のくじの中から同時に2本引く場合の組み合わせ: 10C2=45 通り
・当たりくじを2本引く組み合わせ: 3C2=3 通り
より、3/45 = 1/15 になる。
その他、順列による求め方もある。
(2)「大数の法則」により、nを大きくすればするほど、割合rは1/15(= 0.066666…)に近づく。

##考えたこと
10本のうち当たりくじが3本入っているということなので、これを配列を使って実装すると、
kuzi = [1,2,3,4,5,6,7,8,9,10]と置いて、この中で適当な数字3個を当たりとします。

自分なりに書いてみました。

Dim kuzi kuzi = Array(1,2,3,4,5,6,7,8,9,10) For i = 1 To 20 Step 1 num = num + 1 Randomize hiku1 = Int(Rnd*10) Randomize hiku2 = Int(Rnd*10) if hiku1 = hiku2 Then Do While hiku1 <> hiku2 Randomize hiku2 = Int(Rnd*10) Loop End if kuzi1 = kuzi(hiku1) kuzi2 = kuzi(hiku2) if (kuzi1 = 1 or kuzi1 = 4 or kuzi1 = 8) and (kuzi2 = 1 or kuzi2 = 4 or kuzi2 = 8) Then atari = atari + 1 End if 'MsgBox CInt(kuzi1) & "," & CInt(kuzi2) Next MsGbox "当たり" & atari MsgBox "当たりの割合" & CStr(atari / 20)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/12/25 07:05

質問が書かれていないように見えます。 コードを書いた結果がおかしいのか、コードの書き方を確認してもらいたいのか、はたまた問題の解釈があっているか見てほしいのか、質問をお書きください。
x_x

2018/12/25 07:06

最初のくじを引いた後、引いたくじは戻すのですか? 結果から考えれば戻していないのですが
Python.R

2018/12/25 08:15

くじは引いたら戻すようにしています。
x_x

2018/12/25 08:20

であれば、問題文中の1/15というのがまず間違いということになります。 一度何が正しいのか確認してください
guest

回答3

0

自己解決

みなさんありがとうございました。

問題の例がいくつかあるので、確認しながら実行しましたら、このプログラムで結果的にはあっているようでした。

下記に完成版を載せておきます。

VBScript

1Dim kuzi 2kuzi = Array(1,2,3,4,5,6,7,8,9,10) 3atari = 0 4n = InputBox("試行回数nを入力してください。") 5For i = 1 To n Step 1 6 num = num + 1 7 Randomize 8 hiku1 = Int(Rnd*10) 9 Randomize 10 hiku2 = Int(Rnd*10) 11 if hiku1 = hiku2 Then 12 Do While hiku1 <> hiku2 13 Randomize 14 hiku2 = Int(Rnd*10) 15 Loop 16 End if 17 kuzi1 = kuzi(hiku1) 18 kuzi2 = kuzi(hiku2) 19 if (kuzi1 = 1 or kuzi1 = 4 or kuzi1 = 8) and (kuzi2 = 1 or kuzi2 = 4 or kuzi2 = 8) Then 20 atari = atari + 1 21 End if 22Next 23MsgBox "当たり" & atari 24MsgBox "当たりの割合" & CStr(atari / n)

投稿2018/12/25 08:41

Python.R

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/12/25 08:55

1回目と2回目が同じだったら、ちゃんと違うまでループで処理してましたね。 Rnd*10ばかりに目が行ってました。
guest

0

とりあえず明らかな不備だけ指摘しときます。

num = mum + 1

num = num + 1 誤字ですね。

投稿2018/12/25 07:09

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/12/25 07:13

(VBSって If と if どっちでも動くんだっけ…?)
sazi

2018/12/25 08:07

大文字小文字は区別しません。
dice142

2018/12/25 08:14

ifだけ頭文字小文字だったので違和感合ったのですが動作するんですね。 ありがとうございます。
guest

0

今回、プログラム上で、このような試行をn回繰り返すことにより、
「2本引いて2本とも当たりとなった」結果が何回あったかと(c回とする)、
その割合r=c/nをそれぞれ表示するプログラムを作成せよ。

nは外部より与えられ変化する数値(パラメータ)ではないでしょうか。
また、2回引くというのは、
・配列10個のうち何れか
・10個から1個引いた残り(9個)のうち何れか
になってないと駄目です。

投稿2018/12/25 05:58

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Python.R

2018/12/25 08:23

同時にと記載があったので同時に引くようにしてしまいました。 同時にというのは、そういうことなんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問