Функции Rnd и Randomize
Запустите такую программу:
Dim p As Double
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
p = Rnd()
Debug.WriteLine(p)
End Sub
Вот результат:
0,705547511577606
Это случайное число из диапазона от 0 до 1. Вырабатывает это число функция Rnd.
Щелкнем несколько раз по кнопке. Получим серию случайных чисел:
0,705547511577606
0,533424019813538
0,579518616199493
0,289562463760376
0,301948010921478
Завершим работу программы и снова ее запустим. Пощелкаем по кнопке. Получим ту же серию:
0,705547511577606
0,533424019813538
0,579518616199493
0,289562463760376
0,301948010921478
Выходит, что числа хоть и случайные, но после каждого запуска одинаковые. Не очень-то, получается, случайные. Как сделать их разными от запуска к запуску? Добавим кнопку и к ней процедуру с оператором Randomize:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Randomize()
End Sub
После выполнения оператора Randomize числа будут и случайными и разными от запуска к запуску.
Как получить случайное число из диапазона от 0 до 20? | Так – p = 20 * Rnd. | ||
А из диапазона от 6 до 7? | Так – p = 6 + Rnd. | ||
А из диапазона от 200 до 210? | Так – p = 200 + 10 * Rnd. |
Проверьте.
Как получить случайное целое число из диапазона от 200 до 210? Так –
p = Fix (200 + 11 * Rnd)
Функция Fix «отрезает» дробную часть у числа. Подумайте, почему я написал 11, а не 10. Если не можете додуматься, вычисляйте эту формулу по этапам:
s = 11 * Rnd()
t = 200 + s
p = Fix(t)
Debug.WriteLine(s)
Debug.WriteLine(t)
Debug.WriteLine(p)
Запуская этот фрагмент, наблюдайте за значениями s, t и p. Дождитесь, когда s перевалит за 10. Вы сразу все поймете. Если бы я в формуле вместо 11 написал 10, число p равное 210 никогда бы нам не встретилось.