1: 15.6%
2: 14.0%
3: 12.4%
4: 10.8%
5: 12.2%
6: 11.0%
7: 12.1%
8: 11.9%
※実行する度に変わります
問題2:サイコロを振ろう
8面ダイスを1000回振って各出目の確率を画面に表示しよう
(割り切れない場合は小数第2位を四捨五入)
(割り切れない場合は小数第2位を四捨五入)
期待する画面
解答ソースコード
define('DICE_MIN', 1);
define('DICE_MAX', 8);
define('DICE_TRY', 1000);
$list = [];
// (a)サイコロの出目を初期化する
for ($i = DICE_MIN; $i <= DICE_MAX; $i++) {
$list[$i] = 0;
}
// (b)サイコロを振り出目を記録する
for ($i = 1; $i <= DICE_TRY; $i++) {
$r = rand(DICE_MIN, DICE_MAX);
$list[$r]++;
}
// (c)サイコロの出目の確率を計算する
foreach ($list as $key => $val) {
$a = round($val / DICE_TRY * 100, 2);
$v = sprintf("%.1f", $a);
echo "{$key}: {$v}%<br>";
}
// (d)おまけ
print_r($list);
¥PHP¥
完了にする!
活動記録をTweetする
1.PHPについての説明と表示
プログラム中に仕様に使う数値や文字が現れると後からソースコードを見直したときに混乱するぞ。
マジックナンバーは定数化することにより保守性が高まる。
チーム開発では必須だ。
まず(a)でサイコロの出目を管理する配列を初期化している。
ループの開始値と終了値に定数を使うことによって無理なく初期化できている。
次に(b)において定数に定義した試行回数の数だけサイコロを振っている。
rand関数は引数の範囲内の乱数を返す。
乱数とはランダムな値のことだ。
最後に(c)で各出目の平均値を計算して画面に出力している。
roundは四捨五入、sprintfは文字列を整形する関数だ。
listがどのようになっているか理解できなければ(d)のおまけを実行してほしい。
配列を展開して視覚的に確認することができる。
print_rは配列のデバッグに使えるので覚えておこう。