はじめMath! Javaでコンピュータ数学

第47回 確率の数学 確率とは [後編]

この記事を読むのに必要な時間:およそ 4 分

前回は確率の数学の言葉を一通りおさらいしました。今回はその確認に役立つ道具となるシミュレーション用ソフトウエアを作りましょう。そして完成したものを利用して,実験で得られる値と確率の数学で得られる値との間に差があるかどうかを確認してみましょう。

問題1 さいころの働きをするクラスを作りましょう

今後確率の学習を進める中で,きっと役に立つプログラムを作っておきましょう。確率の数学といえば,やっぱりさいころです。

以下に肝心の部分を省略した未完成版のコードを掲載します。コンパイル・実行は可能ですが,Diceクラスの実装が不完全ですので目的の動作をしません。Diceクラスにコードを追加して完成させてください。

さいころは任意の面数のものを作成できるようにしてください。負の面数や,1面ダイスには意味がありません。2面以上のダイスが作成できるようにしましょう。さいころの目の合計がオーバーフローしないように気を配ってみてください。

ソースコード:Q Sample DiceRoll.java 未完成版

//サンプルコード
//さいころクラスを作ろう
//filename : Q_Sample_DiceRoll.java

import java.util.Random;

class Q_Sample_DiceRoll {

  public static void main(String[] args) {

    //4 面,6 面,20 面のダイス
    Dice d4 = new Dice(4);
    Dice d6 = new Dice(6);
    Dice d20 = new Dice(20);
    //不適切なダイス。roll を呼ぶと0 を返すはず。
    Dice d0 = new Dice(0);
    Dice dError = new Dice(Integer.MAX_VALUE);

    //それぞれ1 回,2 回,3 回振った結果を表示する。
    System.out.println("Dice roll test");
    System.out.println("正常に動作する場合");
    for (int i=1; i <= 3; ++i){
      System.out.println(i + "回振ったら"
                         + d4.roll(i) + "," + d6.roll(i)
                         + "," + d20.roll(i));
    }
    System.out.println("正常に動作しない場合");
    System.out.println(d0.roll(1));
    System.out.println(dError.roll(1));
    System.out.println(d6.roll(Integer.MAX_VALUE/6 + 1));
    System.out.println(d6.roll(-5));
    System.out.println("さいころの面数を確認");
    System.out.println(d4.getSize());
    System.out.println(d6.getSize());
    System.out.println(dError.getSize());
    System.out.println(d0.getSize());

  }// end of main


}// end of class Q_Sample_DiceRoll



/*
 * class Dice
 * 目的: さいころをシミュレートするクラス
 *      コンストラクタに整数値を指定して,
 *      さいころの面数を指示できる。
 */
class Dice {
/*
 * 目的: コンストラクタ
 * 引数: s ダイスの面数
 *      不適当な値なら,面数0 のダイスとなる。
 */
  Dice(int s){

  }// end of Constructor Dice(s)


/*
 * 目的: ダイスを振る
 * 引数: n ダイスを振る回数
 * 戻り値: 出たダイスの目の合計
 */
  public int roll(int n){
    return 0;
  }// end of roll


/*
 * 目的: ダイスの面数を返す
 * 戻り値: ダイスの面数
 */
  public int getSize(){
    return 0;
  }// end of getSize


} // end of class Dice

問題2 さいころを振って確率の値を確かめましょう

2つのことを確かめましょう。

(1)6面のさいころをなるべく多くの回数振って,それぞれの目ごとに(出現回数)/(試行回数)を計算しましょう。

(2)6面のさいころを2回振って,出た目の合計が3になる場合と5になる場合の数それぞれについて(出現回数)/(試行回数)を計算しましょう。なるべく多くの回数試行してください。

(1)を実行すると,さいころを振った数の6分の1に近い数になるはずです。(2)を実行すると3になる場合より5の出る場合の方が倍近く多いはずです。理論的に計算した確率の値と,コンピュータ・シミュレーションによる実験結果がどれほど一致するのか,それともしないのか,確かめてみましょう。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。

コメント

コメントの記入