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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Случайные числа 
:(
    Опции темы
Drizhenko
Дата 19.1.2005, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Простенький вопрос. Подскажите, пожалуйста, как сделать чтобы при каждом запуке программы (при использовании ф-ии RND) выдавлись новые, отличные от предыдущих случайные числа.
PM MAIL   Вверх
Gannibal
Дата 19.1.2005, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



если хочеш что бы числа генерировались случайно .,, неповторялись при запуске то тебе надо тогда в начале кода прописать РАНДОМИЗЕ ТИМЕР он будет всё время при функции РНД выдавать другие ответы

Это сообщение отредактировал(а) M.E.G.U.S - 20.1.2005, 09:04


--------------------
Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить!
PM MAIL ICQ   Вверх
cardinal
Дата 19.1.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Смотри здесь:
http://forum.vingrad.ru/index.php?showtopi...ndpost&p=294164
Подчеркиваю в этом ответе следующее:
Цитата
Еще раз подчеркиваю, что это программа симуляции процессов, то есть она симулирует кликанье юзера (то есть написана она через ж...  smile).

и вот этот кусок кода тоже важен!
Код

one_more_time:
      X = RndInInterval(1, 5)
     
      If X = 1 Or X = 5 Then GoTo one_more_time

Последнее это такая тонкость, которая позволяет получать три разных числа с одинаковой вероятностью.
Просто
Код

Rnd * (RightBorder - LeftBorder) + LeftBorder

это дает конечно числа в интервале [LeftBorder, RightBorder], но с разной вероятностью smile Это такие грабли, на которые я раз наткнулся. Как-нибудь, если время будет сочиню статейку по этому поводу... smile


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

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


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



cardinal
У меня всегда код выглядел так:

Код

Public Function Random(Min As Long, Max As Long) As Long
Do
   Random= Rnd * (Max - Min + 2) + Min - 1
Loop While ((Random < Min) Or (Random > Max))
End Function

Кстати, а не поместить ли это в ФАК?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
__Sergey__
Дата 21.1.2005, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если так, то значения не будут повторяться
Код

Sub(ByRef arr() as Integer)
Dim i As Integer, tmp As Integer

Randomize
For i = UBound(arr) To LBound(arr) Step -1
  ipos = Int((i - LBound(arr) + 1) * Rnd + LBound(arr))
  tmp = arr(ipos)
  arr(ipos) = arr(i)
  arr(i) = tmp
Next i

End Sub

PM MAIL   Вверх
cardinal
Дата 21.1.2005, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Akina, да, похоже на правду smile Но может есть вариант без цикла? Надо подумать... Если что найдешь скажи. Но в FAQ думаю и этот вариант поместить можно. Небольшие тесты показали, что он дает правильный (в смысле с одинаковой вероятностью расбросаные числа) результат.
Добавлено @ 03:29
Цитата(__Sergey__ @ 21.1.2005, 00:04)
Если так, то значения не будут повторяться

То есть? Зачем?


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

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


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(cardinal @ 21.1.2005, 04:29)
в FAQ думаю и этот вариант поместить можно

Надо его доработать - добавить проверку что Max > Min например...
Добавлено @ 09:32
Цитата(cardinal @ 21.1.2005, 04:29)
может есть вариант без цикла? Надо подумать...

Идея есть - но надо проверить...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 21.1.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Готово! Сработало.

Код

Public Function Random(Min As Long, Max As Long) As Long
' Равномерный генератор целых случайных чисел заданного диапазона
  Random = (Rnd * (Max - Min + 1)) Mod (Max - Min + 1) + Min
End Function

Тестировал на выборках
Count=1000000
Min=0
Max=3, 10, 100, 1000

В начало еще можно добавить проверки типа:

Код

If Min >= Max Then
  Random=Min
  Min=Max
  Max=Random
End If
If Min=Max Then Exit Function



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Akina
Дата 21.1.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Полностью так:

Код

Public Function Random(Min As Long, Max As Long) As Long
' Равномерный генератор целых случайных чисел заданного диапазона
' со всеми наворотами
  Random = Min
  If Min = Max Then Exit Function
  If Min > Max Then
     Min = Max
     Max = Random
  End If
  Random = (Rnd * (Max - Min + 1)) Mod (Max - Min + 1) + Min
End Function



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 21.1.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Akina, да красиво smile


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

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


Unregistered











Спасибо. smile
  Вверх
InfMag
Дата 5.2.2005, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



Akina
Че-то я не понял. Почему без randomize?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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