Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/33: Рейтинг темы: голосов - 33, средняя оценка - 5.00
rimdir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
1

случайное число

06.04.2013, 00:12. Просмотров 5906. Ответов 15
Метки нет (Все метки)

как в Winavr сгенерировать случайное число? необходимо чтобы случайное число принимало только одно из 4 значений,
сверх точность ни к чему. У кого какие идеи ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2013, 00:12
Ответы с готовыми решениями:

На индикаторе светится число 1234. Когда нажимают первую кнопку, число увеличивается на 100, когда вторую - на
Добрый день. Помогите с реализацией данного задания: "На индикаторе светится...

Компьютер задает случайное число от 1 до 100 человек должен угадать число
Вот задали задачу учусь в 10 классе уже поставили 4 двойки за задачи,Обьясните...

Программа генерирует случайное двухзначное число до тех пор пока не найдется нечетное число
Программа генерирует случайное двухзначное число до тех пор пока не найдется...

Структурные операторы. Программа генерирует случайное число до тех пор пока не найдется нечетное число
Две задачки, помогите пожалуйста. Заранее спасибо ^_^ 1. Программа...

Написать программу, реализует следующую игровую ситуацию: компьютер задает случайное целое число в интерали от 1 до 10, а мне нужно это число угадать
Написать программу, реализует следующую игровую ситуацию: компьютер задает...

15
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
06.04.2013, 00:52 2
romd() & 0x03
0
kytikot
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
06.04.2013, 02:12 3
Не знаю, как там раскладывается romd() внутри.
Но можно настроить любой таймер и брать его значение. А потом действительно логически множить на 0x03.
0
rimdir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
06.04.2013, 02:23 4
таймеры постоянно заняты в работе.
Цитата Сообщение от _pv
romd() & 0x03
спасибо разобрался, очень удобная и компактная функция
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
06.04.2013, 03:10 5
только неплохо бы инициализировать sromd каким-нибудь по настоящему случайным числом
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
06.04.2013, 03:22 6
только неплохо бы инициализировать sromd каким-нибудь по настоящему случайным числом
Ну-ка предложите это самое настоящее случайное число. Теорию хаоса изучаете?
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
06.04.2013, 03:41 7
ну, например, 43 :)

я про то что без инициализации последовательность всегда будет одна и та же.
хоть какое-то более менее случайное число для инициализации можно взять из младших разрядов из АЦП или из таймера.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
06.04.2013, 03:59 8
<Изображение удалено>
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
06.04.2013, 15:19 9
Цитата Сообщение от _pv
я про то что без инициализации последовательность всегда будет одна и та же.
хоть какое-то более менее случайное число для инициализации можно взять из младших разрядов из АЦП или из таймера.
Из таймера тоже будет одна и та же инициализация, если делать на автомате. А вот если попросить юзера нажать кнопку и снять младшие разряды таймера во время нажатия - тогда да, romdom гарантируется (только частоту таймера выбрать повыше).
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
06.04.2013, 15:25 10
Цитата Сообщение от OtyxPM
Из таймера тоже будет одна и та же инициализация, если делать на автомате.
очевидно что таймер надо читать по какому-либо не синхронному с работой программы событием.
это может быть и другой таймер (часовой кварц), отношение частот будет довольно случайным в младших разрядах.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
06.04.2013, 15:27 11
А чем вам АЦП не угодил?

Если уж с таймером - заюзайте в качестве второго таймера WDT (если он может давать прерывание)
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
06.04.2013, 15:36 12
АЦП иногда отсутствует.
а так, конечно, проще всего брать из АЦП.
0
rimdir
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
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
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
rimdir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 204
06.04.2013, 20:09 15
Ага, спасибо пойду приделывать
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2013, 20:12

Случайное число.
Помогите все поисковики облазил. Мне нужен скрипт JAVA и вот что он должен...

Случайное число
Всем привет! Нашел код, который генерирует псевдослучайные числа (от 0 до...

случайное число
Здравствуйте! Подскажите, пожалуйста, как можно вывести случайное число. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru