Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Функция, возвращающая три значения


Рекомендуемые сообщения

Всем привет. Может кто-нибудь помочь с написанием функции VBA возвращающей случайным образом с равной вероятностью три
значения – 0, 1 или 2. 

Ссылка на комментарий
Поделиться на другие сайты

Я бы попробовала, может замороченно,  но так: сложить все цифры текущего времени включая секунды до одной цифры. Затем разделить на 3 и оставшееся число после деления будет либо 0, либо 1, либо 2. Повтор будет через 3 секунды. 

Первое,  что пришло в голову.. . :)

Ссылка на комментарий
Поделиться на другие сайты

Function N_012() As Byte
N_012 = Timer() Mod 3
End Function

Так это выглядит программно :)

Ссылка на комментарий
Поделиться на другие сайты

Обеспечивает равную вероятность появления трех цифр. Псевдослучайно. 

Можно,  конечно так:

 

Randomize

Int(Rnd () * 10) mod 3

 

Но на самом деле,  это тоже псевдослучайное число. 

Изменено пользователем NatM
Ссылка на комментарий
Поделиться на другие сайты

Не выдает. Проверила. И не может выдавать

 

Остаток деления на 3 уж никак не может быть 3.

Изменено пользователем NatM
Ссылка на комментарий
Поделиться на другие сайты

А потому,  вначале я предлагала плясать от таймера - там повторение через 3 секунды :)

Ссылка на комментарий
Поделиться на другие сайты

Timer вообще-то дает дробные части секунды. Можно сначала умножить на 1000, а уж потом mod 3. Тогда генерить будет довольно хорошо.

Ссылка на комментарий
Поделиться на другие сайты

Таймер дает количество секунд с начала суток. Соответственно,  умножать ничего не надо. 

Я проверяла, что работает как надо,  прежде чем сюда писать. Ощущение,  что вы наобум пишете сообщения. Троллите? 

Ссылка на комментарий
Поделиться на другие сайты

А так можно?

Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long  
lMinNum = 0: lMaxNum = 2  
Randomize  
lRundNum = Int(lMinNum + (Rnd() * lMaxNum))  
MsgBox lRundNum  

 

Ссылка на комментарий
Поделиться на другие сайты

Так вам может вернуть 3. Функция Rnd возвращает от 0 до 1.5 включительно,  как я поняла. 

И,  уже не об ошибке,  а программировании: не понимаю,  зачем делать лишнюю операцию. Сложение с нулем ничего не дает. 

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, NatM сказал:

Так вам может вернуть 3. 

Не возвращает 3. Даже 2 не возвращает.

Чтобы возвращало два нужно изменить значение переменной  lMaxNum на 3.

И тогда

lRundNum = Int(Rnd() * lMaxNum) 

 

Ссылка на комментарий
Поделиться на другие сайты

Прошу прощения. Я перепутала: Rnd возвращает до 1, а не до 1,5 включительно. 

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...