Slant-shadow Опубликовано 6 декабря, 2016 Жалоба Поделиться Опубликовано 6 декабря, 2016 Всем привет. Может кто-нибудь помочь с написанием функции VBA возвращающей случайным образом с равной вероятностью тризначения – 0, 1 или 2. Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 7 декабря, 2016 Жалоба Поделиться Опубликовано 7 декабря, 2016 Я бы попробовала, может замороченно, но так: сложить все цифры текущего времени включая секунды до одной цифры. Затем разделить на 3 и оставшееся число после деления будет либо 0, либо 1, либо 2. Повтор будет через 3 секунды. Первое, что пришло в голову.. . Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 7 декабря, 2016 Жалоба Поделиться Опубликовано 7 декабря, 2016 Function N_012() As Byte N_012 = Timer() Mod 3 End Function Так это выглядит программно Ссылка на комментарий Поделиться на другие сайты Поделиться
Slant-shadow Опубликовано 7 декабря, 2016 Автор Жалоба Поделиться Опубликовано 7 декабря, 2016 А время-то тут причем? Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 8 декабря, 2016 Жалоба Поделиться Опубликовано 8 декабря, 2016 (изменено) Обеспечивает равную вероятность появления трех цифр. Псевдослучайно. Можно, конечно так: Randomize Int(Rnd () * 10) mod 3 Но на самом деле, это тоже псевдослучайное число. Изменено 8 декабря, 2016 пользователем NatM Ссылка на комментарий Поделиться на другие сайты Поделиться
AbraShwabraKadabra Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 В 08.12.2016 в 06:38, NatM сказал: Int(Rnd () * 10) mod 3 А ничего, что он тройки выдает? Надо Int(rnd*3) Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 (изменено) Не выдает. Проверила. И не может выдавать Остаток деления на 3 уж никак не может быть 3. Изменено 9 декабря, 2016 пользователем NatM Ссылка на комментарий Поделиться на другие сайты Поделиться
AbraShwabraKadabra Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 Int(Rnd*10) - результат 0-0 1-1 2-2 3-0 4-1 5-2 6-0 7-1 8-2 9-0 Итого 0 - 40% 1-30% 2 - 30% Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 9 декабря, 2016 Жалоба Поделиться Опубликовано 9 декабря, 2016 А потому, вначале я предлагала плясать от таймера - там повторение через 3 секунды Ссылка на комментарий Поделиться на другие сайты Поделиться
AbraShwabraKadabra Опубликовано 12 декабря, 2016 Жалоба Поделиться Опубликовано 12 декабря, 2016 Timer вообще-то дает дробные части секунды. Можно сначала умножить на 1000, а уж потом mod 3. Тогда генерить будет довольно хорошо. Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 12 декабря, 2016 Жалоба Поделиться Опубликовано 12 декабря, 2016 Таймер дает количество секунд с начала суток. Соответственно, умножать ничего не надо. Я проверяла, что работает как надо, прежде чем сюда писать. Ощущение, что вы наобум пишете сообщения. Троллите? Ссылка на комментарий Поделиться на другие сайты Поделиться
Slant-shadow Опубликовано 16 декабря, 2016 Автор Жалоба Поделиться Опубликовано 16 декабря, 2016 А так можно? Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long lMinNum = 0: lMaxNum = 2 Randomize lRundNum = Int(lMinNum + (Rnd() * lMaxNum)) MsgBox lRundNum Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 17 декабря, 2016 Жалоба Поделиться Опубликовано 17 декабря, 2016 Так вам может вернуть 3. Функция Rnd возвращает от 0 до 1.5 включительно, как я поняла. И, уже не об ошибке, а программировании: не понимаю, зачем делать лишнюю операцию. Сложение с нулем ничего не дает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Slant-shadow Опубликовано 17 декабря, 2016 Автор Жалоба Поделиться Опубликовано 17 декабря, 2016 9 часов назад, NatM сказал: Так вам может вернуть 3. Не возвращает 3. Даже 2 не возвращает. Чтобы возвращало два нужно изменить значение переменной lMaxNum на 3. И тогда lRundNum = Int(Rnd() * lMaxNum) Ссылка на комментарий Поделиться на другие сайты Поделиться
NatM Опубликовано 17 декабря, 2016 Жалоба Поделиться Опубликовано 17 декабря, 2016 Прошу прощения. Я перепутала: Rnd возвращает до 1, а не до 1,5 включительно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти