(1) じゃんけんを行なう関数について

 じゃんけんを行なう関数は

  1. 乱数を用いて自分の手(かみ/いし/はさみ)を決定する
  2. 相手の手と自分の手を比較して勝ち負けを判定し、その回数などを保持する
  3. 最終結果を集計して、それを表示する

などの機能を最低でも満たしている必要がありまる。上のような作業を行なうためには引数として、

  • 相手の出した手
  • 結果を集計する場合にはその指示

を渡す必要があります。

 例えば、引数として、1つの整数を渡し、この整数で、相手の手、集計指示などを示す、などとすればよいことになります。

 このようにするとじゃんけんを行なう関数は、例えば以下のように実装できます。もちろん、絶対に以下のようである必要はなく、これは、あくまで一つの例です。
void janken(int k) /* kは相手の出した手、集計指示を示す
                     例えば
                     k = 1 => いし
                     k = 2 => はさみ
                     k = 3 => かみ
                     k = 0 => 集計
                   */
{
   if(k == 0){
      /* 集計を行なう */
    return ;  
   }

   /* 乱数により自分の手を発生させる */

   /* 自分の手と相手の手を比較し勝ち負けを判定 */

}
(2)乱数の使い方

 区間[0.0, 3.0]上の乱数を発生させ、3つのグル−プ(かみ、いし、はさみ)に分けて、じゃんけんを決めることを考えましょう。

 例えば、rが[0.0,3.0]上の一様乱数であるとして、

  • r < 1.0ならば「いし」
  • それ以外で、r < 2.0ならば「はさみ」
  • それ以外なら「かみ」

などと決めます。
 乱数の発生には、例題に載っているプログラムを使用してもよいが、例えばdrand48という関数を用いることで、区間[0.0,1.0]上の乱数を発生させることができます。[0.0,1.0]上の一様乱数から[0.0, 3.0]上の一様乱数を得るには、単純に3倍した後に整数部分だけを評価すれば、容易に実現できます。

(3)表示について

 じゃんけんを行なった回数、勝ち、負け、引き分けの回数などは、必ず表示した方がよいでしょう。それ以外の表示項目としては、例えば、勝ち、負け、引き分けの確率(各々1/3に漸近するはず)などが挙げられます。