−トップへ−

乱数の生成

 乱数とは,規則性がなく予測できない数値のことです。この乱数を生成するときは次のように記述します。

 randomize ;
 random ( (数値) ) ;

 上記の「 randomize 」は,乱数が発生する系列をそのときの時刻によって初期化します。これを記述しないと,毎回同じ系列の乱数が生成されます。
 「 random ( ) 」で乱数を生成しますが,乱数の範囲は( )の中に記述された数字より1小さい数までです。例えば「 random ( 6 ) 」と記述すれば表示される数字は0から5までです。
 これを使って,サイコロのように1から6を発生させるコードを書いてみます。用意するものはボタンコンポーネントとラベルコンポーネントです。それぞれ貼り付けたら,ボタンの[ OnClick ]イベントを呼び出してください。次にイベントの中に次にように記述してください。

procedure TForm1.Button1Click(Sender: TObject);
  var
    r : integer ;
begin
  randomize ;
  r := random ( 6 ) ;
  label1 . caption := inttostr ( r + 1 ) ;
end;

 上のコードでは,random の( )の中が6になっていますが,これで表示されるのは0から5までです。サイコロのように1から6にするためには,乱数に1をたして表示します。


 次に,ここで発生する乱数は本当に指定した数字の範囲内か,そして数字の出現に片寄りがないのか調べてみたいと思います。用意するのはボタンコンポーネントとメモコンポーネントです。メモコンポーネントは縦長にして貼り付けてください。用意ができたらボタンの[OnClick]イベントに以下のように記述してください。

procedure TForm1.Button2Click(Sender: TObject);   var
    i , r : integer ;
    num : array [ 0 . . 11 ] of integer ; //変数が多いので配列として宣言しています
begin
  memo1 . Lines . Clear ;
  for i := 0 to 11 do num [ i ] := 0 ;
  randomize ;
  for i := 1 to 100 do begin
    r := random ( 10 ) ; //カッコのなかは10なので0から9が表示されるはずです
    case r of //表示される数字によってそれぞれの変数を1ずつ増やします
      0 : num [ 0 ] := num [ 0 ] + 1 ;
      1 : num [ 1 ] := num [ 1 ] + 1 ;
      2 : num [ 2 ] := num [ 2 ] + 1 ;
      3 : num [ 3 ] := num [ 3 ] + 1 ;
      4 : num [ 4 ] := num [ 4 ] + 1 ;
      5 : num [ 5 ] := num [ 5 ] + 1 ;
      6 : num [ 6 ] := num [ 6 ] + 1 ;
      7 : num [ 7 ] := num [ 7 ] + 1 ;
      8 : num [ 8 ] := num [ 8 ] + 1 ;
      9 : num [ 9 ] := num [ 9 ] + 1 ;
      10 : num [ 10 ] := num [ 10 ] + 1 ;
    else
      num [ 11 ] := num [ 11 ] + 1 ; //もし0から10以外の数字が表示されたらここの変数を1増やします
    end ;
  end ;
  for i := 0 to 11 do begin
    memo1 . Lines . Add ( inttostr ( i ) + ' : ' + inttostr ( num [ i ] ) ) ; //それぞれの変数の数を表示します
  end ;
end;

 記述が終わったら「実行」してみてください。正常に動けば0から9までには0以上の数字が入り,10と11は0になっていると思います。0から9の数字はボタンを押すたびに変化すると思います。
 今は繰り返しの数字は100ですが,もっと増やしたらどうなるのか,また乱数生成の範囲を変えたらどうなるかなどいろいろ試してみてください。
 このファイルは掲載しておきます。
→ダウンロード

−トップへ−