Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подбор, Как сделать случайный подбор? 
V
    Опции темы
Игорь
  Дата 24.7.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.6.2006

Репутация: 1
Всего: 1



Подскажите пожалуйста код, который будет подбирать случайные переменные, например между 1,2 и 3.  smile 
При нажатии на кнопку, в техт1 будет выдавать переменную 3 или 1 в случайном подборе.
Надеюсь смысл понятен
 smile  
PM MAIL ICQ   Вверх
mihanik
Дата 24.7.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 11
Всего: 109



Игорь, всё очень просто!

Для этого используется функция RND.

Но есть одно "но".
Она выдаёт "случайное" значение между 0 и 1. (десятичная такая дробь...)
Чтобы в переменную RandomNumber (integer) получить значение от
NStart  (нижняя граница отрезка)  до NStop (верхняя граница отрезка)
можно использовать такую строку

RandomNumber = Int((NStop - NStart + 1) * Rnd() + NStart)

Пример.

Код

Option Explicit

Private Sub Command1_Click()

Dim NStop As Integer
Dim NStart As Integer
Dim RandomNumber As Integer

    NStop = 5
    NStart = 2

RandomNumber = Int((NStop - NStart + 1) * Rnd() + NStart)

MsgBox RandomNumber

End Sub


Описание

Цитата

Rnd([expression]) This function returns a pseudo-random number in the range
0 to 1. The optional argument is called seed and is used as a starting point in the calculations
that generate the random number.
If the seed is negative, the Rnd() function always returns the same number. As
strange as this behavior may sound, you may need this feature to create repeatable
random numbers to test your code. If seed is positive (or omitted), the Rnd()
function returns the next random number in the sequence. Finally, if seed is zero,
the Rnd() function returns the most recently generated random number.
In most cases, you don’t need a random number between 0 and 1, but between two
other integer values. Aplaying card’s value is an integer in the range 1 through 13. To
simulate the throw of a dice, you need a number in the range 1 through 6. To generate
a random number in the range lower to upper, in which both bounds are integer
numbers, use the following statement:
randomNumber = Int((upper - lower + 1)*rnd() + lower);
The following statement displays a random number in the range 1 to 49.
Debug.Print Int(Rnd * 49 + 1)
If you repeat this statement six times, you will get the Lotto’s six lucky numbers.
 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Игорь
Дата 24.7.2006, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.6.2006

Репутация: 1
Всего: 1



Цитата

RandomNumber = Int((NStop - NStart + 1) * Rnd() + NStart)


Эта формула мне понятна, но проблема в том, что с этой формулой иногда бывают 1) повторения, например: показала число 4, при повторном нажатий опять показывает 4, 2) и числа повторяются при каждом запуске программы, тоесть например: при запуске показывает число 5, потом 3, 7, 4. При повторном запуске показывает опять те же числа 5, 3, 7, 4.
Можно ли избежать все это? 
PM MAIL ICQ   Вверх
BUGOR
Дата 24.7.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 12.3.2006

Репутация: 3
Всего: 16



Игорь, вторая проблема решается вставкой в событие FormLoad или любое другое оператора Randomize. А первая проблема пожалуй не решаема, ибо это ведь псевдослучайные последовательности и при маленьком диапазоне вероятность повторения велика, единственное можешь после первого вызова результат сохранить в какую-нибудь переменную, после второго вызова сравнивать результат с переменной, если равны, то опять вызываешь RND, если не равны, то обновляешь переменную(присваиваешь её результат функции вызванной второй раз) и работаешь дальше.  

Это сообщение отредактировал(а) BUGOR - 24.7.2006, 18:30


--------------------
Живу недоумевая, всё время хочу понять...
http://hunger.ru 
PM MAIL WWW ICQ   Вверх
cardinal
Дата 24.7.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Игорь, а вообще до того как задавать вопрос надо пользоваться поиском или зайти в FAQ (где есть решение данного вопроса)... 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Игорь
Дата 24.7.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.6.2006

Репутация: 1
Всего: 1



 smile  2й вариант мне удалось решить с помощью привязки переменной NStart таймером, теперь совпадение при каждом запуске практически не реально. Вот первый вариан пока не получается.


cardinal, извините что не воспользовался поисковиком и FAQ smile  
PM MAIL ICQ   Вверх
cardinal
Дата 24.7.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Если еще не нашел, то вот...
VB-VB-002236 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Игорь
Дата 25.7.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.6.2006

Репутация: 1
Всего: 1



cardinal, эта формула понятна, но были другие сложности, сейчас уже все сложности решены.
Всем спасибо!
 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.