/// 実習D8 制御文(For 〜Next) と乱数 プログラミング実習
 back next 

 乱数と疑似乱数(ぎじらんすう) 

 乱数とは、ランダムに表れる数のこと。例えば、サイコロを振った時に出る目(出目という)は、今までの出目から予測することができないので、乱数といえる。
 疑似乱数とは、計算によって作られる数のこと。計算方法がわかれば予測可能となる。
 プログラミングで利用する乱数は、疑似乱数である。(以降、疑似乱数を乱数と示す。)
 乱数は、次のような分野で利用されている。

関数の利用 クラスの利用
Randomize()
  乱数を初期化する。
Rnd()
  0 以上、1 未満の値(Single型)を返す。
Dim rr As New System.Random()
  乱数オブジェクトrrを作成する。
r = rr.Next
  0以上の整数を返す。

 


プロジェクト名   実習D8乱数の生成1

動作

 15個の乱数を生成する。(クラスを利用)

デザイン

実習D8のデザイン フォームのプロパティ
 Font.Size = 11
 Size = 380, 360
 
テキストボックスのプロパティ
 Multiline = True
  複数行を扱えるようにする。

コード(プログラム)    [終了ボタン]のメソッドは省略しています。 

Public Class Form1
  Private Sub btnRansuu_Click(sender As System.Object, e As System.EventArgs) Handles btnRansuu.Click
    Dim n, r As Integer
    Dim rr As New System.Random()    '乱数のオブジェクトを作成
    tbxKekka. @  = ""
    For n =  A  To  B 
      r = rr.Next    '乱数の生成
      tbxKekka.Text = tbxKekka.Text & r.ToString & vbCrLf
     C 
  End Sub
End Class

解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @   A   B   C
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

キーワード

 vbCrLf…改行を表すデータ。

テスト

 [乱数の生成]ボタンをクリックするたびに、異なる乱数が表示される。
実習D8乱数の生成1の変更
 プログラムの下線部(RandomとNext)を次のように変更して実行したとき、結果を記録せよ。[乱数の生成]ボタンを何度かクリックして、表示される数を確認すること。
(1) Random() → Random(10)、 Next → Next
何度クリックしても @ 同じ値が表示される。
(2) Random(10) → Random()、 Next → Next(6)
表示される数字は、5と A  4と3と2と1と0 である。
(3) Random() → Random()、 Next(6) → Next(1, 6)
表示される数字は、5と  B 4と3と2と1 である。
解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @
  A  (数字をa,b,c,dのようにカンマで区切って入力する。)
  B  (数字をa,b,c,dのようにカンマで区切って入力する。)
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

動作

 0〜9の10種類の乱数を生成し、それぞれの数が出る確率(出現率)を調べる。

デザイン

実習D8と同じ

コード(プログラム)    [終了ボタン]のメソッドは省略しています。 

 実習D8のプログラムを作りかえる。

Public Class Form1
  Private Sub btnRansuu_Click(sender As System.Object, e As System.EventArgs) Handles btnRansuu.Click
    Dim n, r, rcnt(9) As Integer, ritsu As Double
    Dim kaisuu As Integer = 1000    '乱数生成の回数
    Dim rr As New System.Random()    '乱数のオブジェクトを作成
    tbxKekka.Text = ""
    For n =  @  To  A 
      rcnt(n) = 0    'カウント用配列の初期化
    Next
    For n = 1 To kaisuu
      r = rr.Next( B  )    '乱数の生成
      rcnt(r) =  C        '乱数rの個数をカウント
    Next
    For n =  D  To  E 
      ritsu =  F  * 100
      tbxKekka.Text = tbxKekka.Text & n.ToString & "番="
      tbxKekka.Text = tbxKekka.Text & rcnt(n).ToString & "回:"
      tbxKekka.Text = tbxKekka.Text & ritsu.ToString & "%"
      tbxKekka.Text = tbxKekka.Text & vbCrLf
    Next
  End Sub
End Class

解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @   A   B   C
  D   E   F
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

キーワード

解説

 どの数もほぼ同じ出現率(約10%)になる。発生回数を増やせば、より10%に近づく。
出現率(%) = 個別の回数÷全生成回数×100
 プログラムで、0の回数が110回であったとき、出現率は110÷1000×100=11%。

テスト

 [乱数の生成]ボタンをクリックすると回数と出現率が表示される。

動作

 0〜9の10種類の乱数を生成し、それぞれの数が出る出現率を調べる。
 ただし、0は19%、1と2は16%、3〜9は7%の出現率とする。

デザイン

実習D8と同じ

コード(プログラム)    [終了ボタン]のメソッドは省略しています。 

 実習D8のプログラムを作りかえる。

Public Class Form1
  Private Sub btnRansuu_Click(sender As System.Object, e As System.EventArgs) Handles btnRansuu.Click
    Dim n, r, rcnt(9) As Integer, ritsu As Double
    Dim kaisuu As Integer = 10000 '乱数生成の回数
    Dim rr As New System.Random()
    '出現率設定用
    Dim rset(100) As Integer = {
           0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
           1, 1, 1, 1, 1, 1, 1, 0, 0, 0, _
           2, 2, 2, 2, 2, 2, 2, 0, 0, 0, _
           3, 3, 3, 3, 3, 3, 3, 0, 0, 0, _
           4, 4, 4, 4, 4, 4, 4, 1, 1, 1, _
           5, 5, 5, 5, 5, 5, 5, 1, 1, 1, _
           6, 6, 6, 6, 6, 6, 6, 1, 1, 1, _
           7, 7, 7, 7, 7, 7, 7, 2, 2, 2, _
           8, 8, 8, 8, 8, 8, 8, 2, 2, 2, _
           9, 9, 9, 9, 9, 9, 9, 2, 2, 2}
    tbxKekka.Text = ""
    For n =  @ 
       A       'カウント用配列の初期化
    Next
    For n = 1 To kaisuu
      r = rr.Next(100)
      rcnt(rset(r)) = rcnt(rset(r)) + 1     '乱数rの個数をカウント
    Next
    For n = 0 To 9
      ritsu =  B 
      tbxKekka.Text = tbxKekka.Text & n.ToString & "番="
      tbxKekka.Text = tbxKekka.Text & rcnt(n).ToString & "回:"
      tbxKekka.Text = tbxKekka.Text & ritsu.ToString & "%"
      tbxKekka.Text = tbxKekka.Text & vbCrLf
    Next
  End Sub
End Class

解答欄(英数字は半角で入力すること。余分な空白は入れないこと)
  @   A   B
   解答を入力し、[解答チェック]ボタンをクリックする。正解は   、不正解は   で表示される。

キーワード

_(下線) … 次の行に命令が続いていることを示す。

解説

 配列rsetの(0)〜(99)に0〜9のデータを格納している。0〜99の乱数を配列の添字にすることで配列に格納されている0〜9のデータが得られる。配列には0が19個、1と2は16個、3〜9は7個ずつ格納されている。これで出現率を設定している。配列1つ当たり1%になる。

テスト

 実行すると、問題の出現率に近い値が表示される。
Memo
 メソッドの引数にByValがない。VB2010 SP1以降、省略される。
  Private Sub Btn1_Click(ByVal sender As System.Object, …) Handles Btn1.Click
  Private Sub Btn1_Click(sender As System.Object, …) Handles Btn1.Click
 変数の前にByValを付けると値渡し、ByRefを付けると参照渡しになる。省略するとByValとなる。
 実習室のVBは2008なのでByValが自動的につけられる。
 back next 
/// 実習D8 制御文(For 〜Next) と乱数 Copyright©2014 Hiroshi Masuda 

 

 

inserted by FC2 system