乱数

でたらめの数

さいころを振ると1〜6のうちどれかがでます。どれがでやすいということなく同じ確率ででます。ただし回数が少ないうちは同数でるとはかぎりません。つまり5回振って1〜5まで一回ずつでたからといって、つぎが6とは限らないということです。回数を重ねると同数に近くなります。

例33

問題

1から10までの乱数を発生させる式をつくり、上の例のように多数回乱数を発生させてだいたい同数回になることを確認するプログラムを作りなさい。

計算結果の例

100000回やったときのものです。この程度の差は出ます。10000前後になるので、10001 と 9999 とではかなり違うように見えますが実は2しか違わない。10000円のうちの2円の違いです。

 1  10096 
 2  10156 
 3  9981 
 4  10075 
 5  9837 
 6  10047 
 7  9911 
 8  10089 
 9  9909 
 10  9899 

例34

問題

さいころの代わりになるプログラムを作りなさい。つまり、1回の実行で1から6の目が1つ出てくるプログラムにします。出てくる目は数字ではおもしろくないので、さいころに近くなるように工夫します。たとえば、

PRINT "●   ●"
PRINT
PRINT "  ●"
PRINT
PRINT "●   ●"

というようにしましょう。

解説

この問題では FOR 〜 NEXT は必要ありません。配列も必要ありません。まず1〜6の数を出して変数(名前は任意)に代入しておきます。

たとえば、変数 i に1〜6の数が入っているとします。この数にしたがって、IF 文を使用して目の模様を書き分けます。いろいろな方法があります。どれかひとつを使ってください。

方法1

複雑な条件判断の中ほどに解説されている、IF ELSEIF ENDIF を使用するのがいいでしょう。

IF i=1 THEN
   1の時の処理
ELSEIF i=2 THEN
   2の時の処理
ELSEIF i=3 THEN
   ・・・・・・
ELSEIF i=6 THEN
   6の時の処理
END IF

最後の ELSEIF i=6 THEN の部分は ELSE に変えてもかまいません。

方法2

この方法は効率は悪いのですが、結果は方法1と同じです。END IF を忘れてはいけません。

IF i=1 THEN
   1の時の処理
END IF
IF i=2 THEN
   2の時の処理
END IF
IF i=3 THEN
   ・・・・・・
END IF
IF i=6 THEN
   6の時の処理
END IF

方法3

これはわかりにくいので絶対にやめましょう。

IF i=1 THEN
   1の時の処理
ELSE
   IF i=2 THEN
      2の時の処理
   ELSE
      IF i=3 THEN
         3の時の処理
      ELSE
         IF i=4 THEN
             4の時の処理
         ELSE
             IF i=5 THEN
                 5の時の処理
             ELSE
                 6の時の処理
             END IF
         END IF
      END IF
   END IF
END IF

方法4

こんなときにぴったりな、CASE 文です。ここではじめて登場です。SELECT と END SELECT で囲んだ中に書きます。i=1 のとき i=2 のとき‥‥という意味です。

SELECT CASE i
CASE 1
   1の時の処理
CASE 2
   2の時の処理
CASE 3
   3の時の処理
CASE 4
   4の時の処理
CASE 5
   5の時の処理
CASE 6
   6の時の処理
END SELECT

聖愛高等学校
http://www.seiai.ed.jp/