- (1) じゃんけんを行なう関数について
じゃんけんを行なう関数は
- 乱数を用いて自分の手(かみ/いし/はさみ)を決定する
- 相手の手と自分の手を比較して勝ち負けを判定し、その回数などを保持する
- 最終結果を集計して、それを表示する
などの機能を最低でも満たしている必要がありまる。上のような作業を行なうためには引数として、
- 相手の出した手
- 結果を集計する場合にはその指示
を渡す必要があります。
例えば、引数として、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に漸近するはず)などが挙げられます。