サイコロの出る目の確率

  1. サイコロの出る目の確率

    1. 目的
      サイコロをn回ふったとき、特定の目(例えば1)がk回出る確率を計算します。

    2. 計算式
      特定の目が出る確率は (1/6) です。n回中にk回成功する場合の数は Ck ですから、特定の目がk回出る確率は

       Ck ・(1/6)k・(5/6)n-k  

      となります。
       Ck は、前回計算しています。pnの計算は、関数ライブラリ Math.pow(p,k) が利用できます。

    3. 整数と小数
      C言語とどうように、数値は整数と小数を区別します。確率は小数型の変数を利用します。小数型変数は
       float <変数名>
      で定義します。ただ、ここでは、計算の精度を高めるため、倍精度型小数を利用します。これは
       double <変数名>
      で宣言します。double型でも計算式の書き方は同じです。
       一つの式に整数と小数が混在する場合、整数は小数に自動変換されます。また、floatとdoubleが混在する場合、doubleに自動変換されます。

    4. 数学関数ライブラリ
      数学関数は、Mathクラスに定義されています。クラスMathで定義された関数(整式にはjavaではメソッドといいます)は Math.pow() のように、クラス名.メソッド名 で呼び出すことができます。平方根を計算するメソッドは sqrt() なので、5の平方根は Math.sqrt(5) で計算できます。

  2. プログラム

    1. 画面レイアウト
       n,k を入力し、確率を求めるのが目的ですから、前回の画面が、ほぼ、そのまま利用できます。ボタンは一つだけでよいので、「計算」のラベルを付けておきます。

    2. 計算プログラム
       計算ボタンを押すと probbutton_actionPerformed() が呼び出されるよう設定しておきます。この関数は求める確率を計算します。Integer.parseInt() は n と k の値を整数に変換し、nnumとknumに代入します(前回やりました)。
       次に、確率の値を記録する変数 prob を double で宣言しています。確率は整数でなく、小数で計算する必要があります。doubleは倍精度の小数型変数を宣言します。

        void probbutton_actionPerformed(ActionEvent e) {
          int nnum=Integer.parseInt(nField.getText());
          int knum=Integer.parseInt(kField.getText());
          double prob=0.0;
          int cb=comb(nnum,knum);
          prob=cb*Math.pow(5.0,nnum-knum)/Math.pow(6.0,nnum);
          System.out.println("nCk:"+cb);
          rField.setText(Double.toString(prob));
        }
      comb(nnum,knum);は組み合わせの数 nnumCknum を計算します。
      Math.pow(5.0,nnum-knum) は 5nnum-knum を計算します。
      rField.setText に 結果を表示しますが、ここでも、probがdouble型ですので、 Double.toString(prob) で倍精度の小数から文字への変換を指定しています。

    3. ソース
       このプログラムのソースはここにあります。

    4. 実行
      nとkを設定し、「計算」ボタンを押します。



  3. 演習

     
    1. 演習1
      プログラムのソースをファイルに保存し、コンパイル&実行をして下さい。

    2. 演習2
       n枚の硬貨を投げたとき、k枚の表が出る確率を求めるプログラム coin を作成して下さい。