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

[課題16] コイン投げのシミュレーション(2)

課題

以下の説明に従って「コイン投げのシミュレーション」(課題10)のプログラムをもとにして,表が出た回数の分布を表示するように拡張したプログラムを作成して,提出して下さい.

コイン投げのシミュレーション」と同じく,次のように表がM%出るコインをN回投げる反復試行を考えます.

今回は上のように「N回投げる」反復試行をT回(T≧1)繰り返す(コインを全部でN・T回投げることになる). このシミュレーションについて,次のように結果を表示することにする.

補足

今回の課題で,一つの手順として,まずシミュレーションを先に完了させて,つまり 反復試行(=N回のコイン投げ)をT回すべて実行して,結果のデータC0,C1,...,CT-1の全てを記録し終わってから,それらのデータに基づいてヒストグラムを生成することはできます. しかしこの方法ではTが大きくなるほど保存しておくべきデータが増えていきます. 今回の課題のプログラムでは,ヒストグラムを構築するために,C0,C1,...,CT-1をすべてデータとして保持しておく必要はありません. 反復試行(=N回のコイン投げ)を実行しつつ,ヒストグラムを同時に構築していくことができます.

想定実行例

シミュレーションのプログラムは次のように動作することを想定しています(プログラムのファイル名をcoin_toss2.rbとします). 実現に必要な技術的要素については,以下で説明します.

  $ ruby coin_toss2.rb 75 20 1000
   0 0
   1 0
   : :
   6 0
   7 1
   8 0
   9 4
  10 7
  11 25
  12 68
  13 121
   : :
  18 64
  19 23
  20 3
   (: 結果の表示を一部省略しています)

[option] ヒストグラムの表示方法

ヒストグラムを次のように(簡易的にでも)視覚化すると結果が分かりやすくなるでしょう.

  0  0
  1  0
  2  0
  3  0
  4  0
  5  0
  6  0
  7 # 1
  8  0
  9 # 4
 10 ## 7
 11 ####### 25
 12 ##########|####### 68
 13 ##########|##########|##########|# 121
 14 ##########|##########|##########|######### 155
 15 ##########|##########|##########|##########|##########|####### 227
 16 ##########|##########|##########|##########|###### 184
 17 ##########|##########|##########| 118
 18 ##########|###### 64
 19 ###### 23
 20 # 3

 Average=14.951
 

この例では,M=75,N=20,T=1000で表の回数が15回(15/20=0.75)が最も多くなっています(15回がモード).また表が出た回数の平均値は約14.95回でした.プログラムではこのように平均値も結果として表示してみるとよいでしょう.

グラフは適切に縮尺を変えられるとよいでしょう. 次はM=30,N=20,T=100000で実行してみたときの例です.

  0 # 92
  1 ## 738
  2 ######## 2818
  3 ##########|######### 7213
  4 ##########|##########|##########|### 12934
  5 ##########|##########|##########|##########|##### 17940
  6 ##########|##########|##########|##########|######## 19146
  7 ##########|##########|##########|##########|# 16227
  8 ##########|##########|######### 11480
  9 ##########|####### 6568
 10 ######## 3094
 11 #### 1232
 12 # 380
 13 # 105
 14 # 30
 15 # 2
 16 # 1
 17  0
 18  0
 19  0
 20  0

 Average=5.997

これらの実現は必須ではありません.

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


=begin

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

感想など(任意)

=end

技術要素

プログラム作成に用いる可能性のある技術要素を示します.

サンプルプログラム

次にサンプルプログラムを掲載しています.

サンプルプログラムをブラウザの画面で開いたときに文字化けしてしまう場合には, ダウンロードしてEmacs等で開いてみて下さい.

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