0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
|
|
1 | |
случайное число06.04.2013, 00:12. Показов 6547. Ответов 15
Метки нет (Все метки)
как в Winavr сгенерировать случайное число? необходимо чтобы случайное число принимало только одно из 4 значений,
сверх точность ни к чему. У кого какие идеи ?
0
|
06.04.2013, 00:12 | |
Ответы с готовыми решениями:
15
Компьютер задает случайное число от 1 до 100 человек должен угадать число Программа генерирует случайное двухзначное число до тех пор пока не найдется нечетное число Структурные операторы. Программа генерирует случайное число до тех пор пока не найдется нечетное число Как умножить число на случайное число от 1 до 9? Написать программу, реализует следующую игровую ситуацию: компьютер задает случайное целое число в интерали от 1 до 10, а мне нужно это число угадать |
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 00:52 | 2 |
romd() & 0x03
0
|
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
06.04.2013, 02:12 | 3 |
Не знаю, как там раскладывается romd() внутри.
Но можно настроить любой таймер и брать его значение. А потом действительно логически множить на 0x03.
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
|
|
06.04.2013, 02:23 | 4 |
таймеры постоянно заняты в работе.
Сообщение от _pv
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 03:10 | 5 |
только неплохо бы инициализировать sromd каким-нибудь по настоящему случайным числом
0
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|
06.04.2013, 03:22 | 6 |
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 03:41 | 7 |
ну, например, 43 :)
я про то что без инициализации последовательность всегда будет одна и та же. хоть какое-то более менее случайное число для инициализации можно взять из младших разрядов из АЦП или из таймера.
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
06.04.2013, 03:59 | 8 |
<Изображение удалено>
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
06.04.2013, 15:19 | 9 |
Сообщение от _pv
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 15:25 | 10 |
Сообщение от OtyxPM
это может быть и другой таймер (часовой кварц), отношение частот будет довольно случайным в младших разрядах.
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
06.04.2013, 15:27 | 11 |
А чем вам АЦП не угодил?
Если уж с таймером - заюзайте в качестве второго таймера WDT (если он может давать прерывание)
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 15:36 | 12 |
АЦП иногда отсутствует.
а так, конечно, проще всего брать из АЦП.
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
|
|
06.04.2013, 20:01 | 13 |
годится одно и тоже при старте, ранд мне нужен для игры на дисплее, все равно всех последовательностей игрок не запомнит. Вот как бы только реализовать процент ранда? например 1,2,3 с 99% а 4 с 1%
пока как то так char x; x = (romd() & 0x03); void func (x) { ... ... ... }
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
|
|
06.04.2013, 20:04 | 14 |
Ну то есть
1 - 33% 2 - 33% 3 - 33% 4 - 1% Так и делать: допустим выдается число от 0 до 99. if (romdom < 33) return 1; if (romdom < 66) return 2; if (romdom < 99) return 3; return 4;
0
|
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
|
|
06.04.2013, 20:09 | 15 |
Ага, спасибо пойду приделывать
0
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
06.04.2013, 20:12 | 16 |
Код
const int prob[]={99,99,99,1} int r = (long)romd()) * (prob[0]+prob[1]+prob[2]+prob[3] - 1) / RAND_MAX; if (r < prob[1]) {1} else if (r < prob[1]+prob[2]) {2} else if (r < prob[1]+prob[2]+prob[3]) {3} else {4}
0
|
06.04.2013, 20:12 | |
06.04.2013, 20:12 | |
Помогаю со студенческими работами здесь
16
Случайное число Случайное число Случайное число Случайное число Случайное число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |