Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как заставить rand() выдавать числа в нужном интервале

2.1K
16 июня 2003 года
qrwa
10 / / 13.01.2003
Нужны случайные числа в диапазоне от 0 до Х, где Х - каждый раз другое число. rand() генерирует их, но их нельзя коноролировать. Может кто знает как тут быть?
356
17 июня 2003 года
molnij
159 / / 20.06.2000
мда-а-а-ааа....
если rand дает числа от 0 до 1 просто умножай на X,
если rand дает числа от 0 до maxRand то дели на maxRand и умножай на X. Тут правда загвоздка, надо внимательно посмотреть, чтобы правильно выполнялось округление, ну это уж сам доделаешь...
2.1K
17 июня 2003 года
qrwa
10 / / 13.01.2003
Vsio, sdelal
831
18 июня 2003 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by qrwa
Vsio, sdelal


Если X - целое (и меньше RAND_MAX, что наверняка), то воспользуйся такой конструкцией (работает быстрее всего):

rand() % X
возвращает псевдо случайные числа от 0 до X - 1

356
18 июня 2003 года
molnij
159 / / 20.06.2000
круто!!! :))
Спасибо!!!
до такого я еще не додумался - ПроЩЕ и гарантированннеее, а то в своем методе, я постоянно забывал приводить к нецелым и получал фигню...
ЕщЕ раЗ спаСибо!!!!!!!!!
1.9K
19 июня 2003 года
kswapd
93 / / 08.02.2003
Цитата:
Originally posted by S_T

Если X - целое (и меньше RAND_MAX, что наверняка), то воспользуйся такой конструкцией (работает быстрее всего):

rand() % X
возвращает псевдо случайные числа от 0 до X - 1



На самом деле это не совсем верный способ.
Предположим, что RAND_MAX==2 (rand() возвращает числа от 0 до 2),
а нам нужны случайные числа от 0 до 1 (X==2). Данный способ будет
давать 0 в 2/3 случаев, а 1 в 1/3, что не совсем то, что нам нужно.
Правильная работа гарантирована только при X, делящем RAND_MAX (обычно 2^15) нацело.

435
28 августа 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by qrwa
Нужны случайные числа в диапазоне от 0 до Х, где Х - каждый раз другое число. rand() генерирует их, но их нельзя коноролировать. Может кто знает как тут быть?



сначала напиши функцию
srand(time(0))
это необходимо чтобы всегда были разные случайные числа

получить же случайное число в диапазоне от Min до Max можно по такой формуле

x=rand()%(Max-Min+1)+Min
пример от 0 до 10
x=rand()%11
пример от -20 до 20
x=rand()%41-20
незабудь подключить <time.h>

401
01 сентября 2003 года
Br@in RIPper
289 / / 15.02.2003
по-моему в Borland C есть такой макрос:
inline int random(int __num) { return(int)(((long)rand()*__num)/(RAND_MAX+1)); }

возвращает число от 0 до __num (или __num-1 не уверен точно)
435
03 сентября 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by Br@in RIPper
по-моему в Borland C есть такой макрос:
inline int random(int __num) { return(int)(((long)rand()*__num)/(RAND_MAX+1)); }

возвращает число от 0 до __num (или __num-1 не уверен точно)


Все правильно, но здесь имеется ввиду Microsoft Visual C++, а не Borland.:D

401
03 сентября 2003 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by avatara

Все правильно, но здесь имеется ввиду Microsoft Visual C++, а не Borland.:D



а почему ты думаешь, что в MS VC++ это не будет работать? просто в борланде это вписано в default header, а в MS нет.

435
04 сентября 2003 года
avatara
188 / / 07.07.2003
Цитата:
Originally posted by Br@in RIPper


а почему ты думаешь, что в MS VC++ это не будет работать? просто в борланде это вписано в default header, а в MS нет.



Не знаю не пробовал. Может и будет работать. Надо посмотреть. Если будет работать, то возьму на заметку.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог