Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Генерация случайного числа в промежутке

33K
29 марта 2008 года
KichAngel
9 / / 29.03.2008
Есть проблема. Нужно создать механизм, используя Microsoft Visual Basic. Суть его работы в том, что он будет выбирать случайное целое число в диапазоне от X до Y, которые пользователь сам введет в текстовые поля, перед нажатием кнопки, запускающей программный код.
Обычный Randomize Timer тут не помогает, как я не пытался. Кто может помочь?
251
29 марта 2008 года
SkyMаn
1.7K / / 31.07.2007
А покажите-ка код, который вы пыталсиь писать. Если вы, конечно, пытались.
33K
29 марта 2008 года
KichAngel
9 / / 29.03.2008
Я лишь эксперементировал с этим:

Цитата:

Randomize Timer
xy = int(rnd*y) + x



Ну, прежде я присваиваю значения текстовых полей для x и y, объявляю переменные и т.д. Это все ясно. Трудность в том, как более грамотно производить генерацию числа в промежутке от x до y. Вышеизложенный код, хоть и простейший грязный генератор, но он относительно справляется с задачей. Относительно, выдавая числа превышающие "y". И почти никогда не приближается к минимальному X. Почему так происходит, понятно. Как исправить - я не знаю.

251
29 марта 2008 года
SkyMаn
1.7K / / 31.07.2007
xy = int(rnd*y) + x - y
33K
30 марта 2008 года
KichAngel
9 / / 29.03.2008
Цитата:
xy = int(rnd*y) + x - y


Хм... ну в таком случае мы непременно выскакиваем за промежуток. Пример. Нам необходимо выбрать случайное число из диапозона 200 - 450. Если код работает по этой форме, то... может получится так:
xy = 'генерация случайного числа' (пускай будет)300 + 200 - 450 = 50.
Выходит, что при всех этих операциях, результат будет вылетать за промежуток. В примере выходит 50, в тот момент, как минимальное возможное значение должно быть >= 200. То есть >=X.
Конечно, можно сделать цикл, при котором задать условие на проверку xy и в случае, если оно вылетает из диапозона - повторить попытку генерации. Но даже при этом, числа в результатах будут мягко говоря похожи.

18K
30 марта 2008 года
pavel55
79 / / 14.05.2007
из справки по функции RND в Excel

To produce random integers in a given range, use this formula:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)


'ПЕРЕВОД
чтобы получить произвольное число в заданном диапазоне используйте эту формулу

Int((верхняя_граница - нижняя_граница + 1) * Rnd + нижняя_граница)

 
Код:
Sub Макрос1()
Dim MyValue As Long
    Randomize
    MyValue = Int((450 - 200 + 1) * Rnd + 200)
    MsgBox MyValue
End Sub
33K
31 марта 2008 года
KichAngel
9 / / 29.03.2008
Воу. pavel55, спасибо огромное. Теперь все пучком.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог