第6講 配列
第3話 乱数系列を変えるシード値を現時刻から取得
70 53 57 28 30 77 1 76 81 70
を実現するプログラム例
Module Module1
Sub Main() '私は社長だ。
f()
End Sub
Sub f()
Dim a(9) As Integer '配列aの宣言
Dim i As Integer
For i = 0 To 9
a(i) = Int(Rnd() * 100)
Next
For i = 0 To 9
Console.Write("{0:d} ", a(i))
Next
Console.WriteLine()
End Sub
End Module
皆さん、乱数のはずなのに、
何回実行しても実行画面は
70 53 57 28 30 77 1 76 81 70
とまったく同じです。
乱数(正確には疑似乱数)といえど、でる順番は決まっているのです。
順番を変えるには、シード値を指定します。
シード値とは乱数系列を決定する値です。
乱数系列を変えるときに使います。
具体的には、
Randomize(*)
*に数字を入れます。
では、コードを
Module Module1
Sub Main() '私は社長だ。
Randomize (0) 'シード値を指定
f()
End Sub
Sub f()
Dim a(9) As Integer '配列aの宣言
Dim i As Integer
For i = 0 To 9
a(i) = Int(Rnd() * 100)
Next
For i = 0 To 9
Console.Write("{0:d} ", a(i))
Next
Console.WriteLine()
End Sub
End Module
と変更しましょう。
すると、実行結果は
76 35 10 70 4 53 72 61 24 40
と前と変わります。
では皆さんシード値をいろいろ変えて実験してみて下さい。
結果の一部は30行下に示します。
シード値と結果(左がシード値で、右が結果)
指定なし | 70 53 57 28 30 77 1 76 81 70 |
0 | 76 35 10 70 4 53 72 61 24 40 |
1 | 76 10 61 93 10 10 76 26 5 74 |
2 | 1 60 35 95 29 78 97 86 49 65 |
3 | 13 85 72 46 89 62 58 66 22 11 |
では、毎回自動的に乱数系列を変える方法はあるでしょうか。
あります。乱数系列のシード値を時間から取得するのです。
Module Module1
Sub Main() '私は社長だ。
Rnd(-1)
Randomize(Timer())
f()
End Sub
Sub f()
Dim a(9) As Integer '配列aの宣言
Dim i As Integer
For i = 0 To 9
a(i) = Int(Rnd() * 100)
Next
For i = 0 To 9
Console.Write("{0:d} ", a(i))
Next
Console.WriteLine()
End Sub
End Module
とすればよいのです。
これ以降では乱数を使うときには、原則としてピンクを入れることにします。
初心者の方は、乱数系列を決定するシード値を現時刻から取得するには
Rnd(-1)
Randomize(Timer())
とするものだ、と思って下さい。
お呪いであると思って下さい。
一気にすべてを理解しようとする姿勢は禁物です。
ただ、1行目は今回はなくても良いのですが、
For文などの繰り返し処理で、
乱数系列を変えるときには入れないとだめなので、
セットにして入れるようにしましょう。
配列は
Dim a(2, 3) As Integr '2次元配列の宣言
とすると、2次元配列となります。
2次元という意味は、
a(0, 0),a(0, 1),a(0, 2),a(0, 3),
a(1, 0),a(1, 1),a(1, 2),a(1, 3),
a(2, 0),a(2, 1),a(2, 2),a(2, 3)
と縦と横を持つ配列になるからです。
3行4列配列と呼びます。
では、この2次元配列を使用して、
を実現しましょう。
条件は、2次元for文で実行することとデータは100未満のランダムな整数とします。
また、実行画面をそろえるために
Rnd(-1)
Randomize(Timer())
を一時的に外しておいて下さい。
一時的に外すよい方法は、
'Rnd(-1)
'Randomize(Timer())
と注釈文にしてしまうという方法です。
さらに、VBには数十行に渡って注釈文にしたり、
戻したりする方法も用意されています。
注釈文にするには、ドラッグによって対称行を選択状態にして、赤をクリック!
'を外すには、ドラッグによって対称行を選択状態にして、緑をクリック!