[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) >  [課題10] コイン投げのシミュレーション ]

[課題10] コイン投げのシミュレーション

課題

以下の説明に従って,(仮想的に)コイン投げを繰り返して,その結果を解析するプログラムを作成して提出してください.

コイン投げのシミュレーションは次の要領で行うことにします.

m,nは条件を満たすように適切に指定されると仮定して構いません. 想定外の値が指定された場合の処理(例外処理)は考えなくても構いません.

想定する実行例

プログラムのファイル名が仮に「coin_toss.rb」であったとして, 想定される実行例を示します.


  $ ruby coin_toss.rb 75 20 
  O@@@O@@O@@@O@OO@O@@@
  RESULT:   0.650(13/20)
  EXPECTED: 0.750

プログラムの処理の概要を示します.

  1. 実行の際,プログラムファイル名(coin_toss.rb)に加えて,表が出る確率(m[%])コインを投げる回数(n)をこの順で指定します. 上の例では表が出る確率を75%,投げる回数を20回と指定しています. プログラムにおいて,これらの数を読み取って変数に格納する方法については,以下で説明します.
  2. プログラムが実行されたら,まずn回のコイン投げの結果を一列に並べて表示します. コインを投げたときに出た面が「表」であるか「裏」であるかは,それぞれ適当な記号で表すことにします. 上の例では,表を「@」,裏を「O」で表しています.
  3. n回のコイン投げが終わったら,最後にシミュレーション全体の結果を表示します.上の例では,試行の結果は表が13回で,表が出た割合(RESULT)が13/20=65%,一方で期待値(EXPECTED)は75%であることを示しています.

[参考] シミュレーションの結果の解析

プログラムが完成したら,コインを投げる回数nによって,シミュレーションの結果がどのように変わるのかについて調べてみてください.

プログラムは確率的な挙動を示すため, 表が出る確率(m/100)とコインを投げる回数(n)が同じであっても,結果が同じになるとは限りません. 指定する値(m,n)を変えないでプログラムを何回か実行してみてください. またコインを投げる回数(n)を大きくしていってみてください. どのような傾向が見られるでしょうか.

次に示すコードをプログラムの先頭にコピーして入れておくようにしてください(必要事項は記入してください).


=begin

所属:     
氏名:     
学生番号:
難易度(5段階評価):

感想など(任意)

=end

技術要素

プログラム作成に用いるであろう技術要素を示します.

サンプルプログラム

次にサンプルプログラムを示します. 課題のプログラム作成に役立ててください.

これらをブラウザの画面で開いたときに文字化けしてしまう場合には, ダウンロードしてEmacs等で開いてみてください.

[参考] 大数の法則

この課題で示したコイン投げでは「同一回数の試行」を何セットも行ったときに, 1セットでの試行回数(n)を増やすほど, 表が出る割合が期待値に近くなることが多くなることが見て取れるでしょう(セットごとの「表が出る割合」の散らばり具合は小さくなる).

さらに試行回数を増やしていった極限を考えたときに, 表が出る割合は期待値に「収束」することが数学的に知られていて,そのような振る舞いは一般に「大数の法則」と呼ばれています.

ここに書いてある説明はかなりイイカゲンです. コイン投げの試行では「大数の法則」は成り立ちます. しかし一般には「大数の法則」が成り立たない場合もあります. 数学的な定義については「確率・統計」の書籍を参照してください.
[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2025) >  [課題10] コイン投げのシミュレーション ]