Как заставить rand() выдавать числа в нужном интервале
если rand дает числа от 0 до 1 просто умножай на X,
если rand дает числа от 0 до maxRand то дели на maxRand и умножай на X. Тут правда загвоздка, надо внимательно посмотреть, чтобы правильно выполнялось округление, ну это уж сам доделаешь...
Vsio, sdelal
Если X - целое (и меньше RAND_MAX, что наверняка), то воспользуйся такой конструкцией (работает быстрее всего):
rand() % X
возвращает псевдо случайные числа от 0 до X - 1
Спасибо!!!
до такого я еще не додумался - ПроЩЕ и гарантированннеее, а то в своем методе, я постоянно забывал приводить к нецелым и получал фигню...
ЕщЕ раЗ спаСибо!!!!!!!!!
Если 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) нацело.
Нужны случайные числа в диапазоне от 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>
inline int random(int __num) { return(int)(((long)rand()*__num)/(RAND_MAX+1)); }
возвращает число от 0 до __num (или __num-1 не уверен точно)
по-моему в Borland C есть такой макрос:
inline int random(int __num) { return(int)(((long)rand()*__num)/(RAND_MAX+1)); }
возвращает число от 0 до __num (или __num-1 не уверен точно)
Все правильно, но здесь имеется ввиду Microsoft Visual C++, а не Borland.:D
Все правильно, но здесь имеется ввиду Microsoft Visual C++, а не Borland.:D
а почему ты думаешь, что в MS VC++ это не будет работать? просто в борланде это вписано в default header, а в MS нет.
а почему ты думаешь, что в MS VC++ это не будет работать? просто в борланде это вписано в default header, а в MS нет.
Не знаю не пробовал. Может и будет работать. Надо посмотреть. Если будет работать, то возьму на заметку.