Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2011, 03:48   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
Вопрос проблема с rand()

Всем привет! и зарание спасибо за помощь!
у меня проблема в этой функции:
Код:
void plods (double *x1,double *x2,double *y1,double *y2, int *v)//функция для создания плодов, аргументы - это указатели на переменные координат плодов
{
    int s = rand() % 1;
    int f = 1;
    int l = -1;

    if (s == 0)
    {
        f=f*l;
    }

    *x1 = (rand()%999 + 200)/1000*f;//получаем рандомно
    *y1 = (rand()%999 + 200)/1000*f;

    *x2 = *x1 + 0.2;//это же квадрат :)
    *y2 = *y1 + 0.2;
    *v = 0;
    printf("%f, %d", *x1, f);
}
*x1 всегда равно 0, только редко 1... а если вместо /1000 поставить /100 все ок... ток мне это не подходит. ставил (rand()%99,9 + 20)/100 - результат такой же

пишу *x1 = (rand()%0,999 + 0,2)*f;
пишет ошибку...
пишу *x1 = (rand()%0,999000 + 0.200000)*f;
пишет левые числа ХД, ну это уже так просто попробовать захотелось.

подскажите что делать? доубле должен вммещять такие числа
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 03:56   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
int s = rand() % 1;
Будет всегда равно нулю, так как на 1 любое целое число делится без остатка.
Цитата:
*x1 всегда равно 0, только редко 1... а если вместо /1000 поставить /100 все ок... ток мне это не подходит. ставил (rand()%99,9 + 20)/100 - результат такой же
Если int делить на int - то и на выходе int. Так что сейчас формула работает абсолютно правильно, какого результата ты от нее ждешь-то? Если случайное дробное число от 0 до 1, то делается это так:
Код:
*x1 = rand() / static_cast<double>(RAND_MAX);
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 03:59   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

(rand()%999 + 200) - целое число, Вы его целочисленно делите на 1000. Сделайте так
Код:
*x1 = (rand()%999 + 200)/1000.0*f;
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 20.07.2011, 04:03   #4
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Да код вообще какой-то шаманский, если честно. Зачем введена переменная l? Зачем такая чудовищная инициализация f? Зачем переменная s? Все это можно уместить на одной строке, избежав создания лишних переменных. Насколько я понял, f должна быть равна либо 1, либо -1, с 50% вероятностью. Это делается без проблем так:
Код:
int f = (rand()%2)?1:-1;
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 04:16   #5
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
Смех

ухты ... форум не спит. обоим большое спасиба и плюсики...

за танци с бубном простите, просто ночь... и я циклюся ну другой проблеме (если интересно я её опишу)
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 04:17   #6
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Уж можно и описать, авось помочь смогу :)
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 04:41   #7
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Уж можно и описать, авось помочь смогу
ыыы репа как я понимаю поднимется после проверки модером? наверное...

ну вобшим я пишу небольшую 2д игру. суть банальная, собирать фрукты. (там 1 фрукт ), я почти закончил, ток не могу собирать фрукты, т.к. очень тяжело стать на точные координаты фрукта. только что подумал округливать координаты перед проверкой... это поможет... но не очень сильно. как эту проблему можна ещё решать?
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 04:42   #8
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
ыыы репа как я понимаю поднимется после проверки модером? наверное...
Не понял. Репутацию пользователи сами друг другу поднимают.
Что касается твоей проблемы - попробуй сравнивать с диапазоном координат. То есть, допустим, фрукт находится в точке Y. А пользователь в точке X. И проверять надо не (X == Y), а ((X >= Y - eps) && (X <= Y + eps)), где eps - допустимая погрешность.
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 20.07.2011 в 04:49.
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 04:46   #9
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Не понял. Репутацию пользователи сами друг другу поднимают.
Что касается твоей проблемы - попробуй сравнивать с диапазоном координат. То есть, допустим, фрукт находится в точке Y. А пользователь в точке X. И проверять надо не (X == Y), а ((X >= Y - eps) && (X =< Y + eps)), где eps - допустимая погрешность.
это идея , супер!

что касается репутации, я одобрил сообщние, а твоя рипутация не изменилась
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 04:48   #10
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
что касается репутации, я одобрил сообщние, а твоя рипутация не изменилась
Потому что у тебя самого ее еще слишком мало, чтобы изменять чужую. Но это уже оффтоп.
P.S. Рад, что смог помочь.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра:"Магическое число"(проблема с rand()) Rusl_v Общие вопросы C/C++ 16 27.12.2010 20:21
rand VAN32 Общие вопросы C/C++ 5 07.03.2010 21:38
rand merets Общие вопросы C/C++ 1 09.09.2009 23:57
rand() ????? Revenholm Общие вопросы C/C++ 7 25.04.2009 18:47
Проблема с rand() TheWanderer Общие вопросы C/C++ 5 21.12.2008 23:38