Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
#1

rand() не случайный - C++

27.04.2012, 15:00. Просмотров 1111. Ответов 5
Метки нет (Все метки)

почему на кажджой итерации rand() выдает одно и тоже значение ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
srand((unsigned)time(NULL));
        vector<const string> var(4);
        var[0] = "Integer";
        var[1] = "Float";
        var[2] = "String";
        var[3] = "Date";
        int type_num ;
        string rands;
        for(int i = 0; i < col - 1; i++){
            rands = rand_str(max);
            type_num = rand() % 4;
            cout<<rands<<" "<<var[type_num]<<"; ";      
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 15:00     rand() не случайный
Посмотрите здесь:

C++ rand()
rand C++
rand C++
rand() C++
rand() между 0 и 1 C++
C++ rand от 1 до 16
rand()%(-20)%(20); C++
rand, srand и т.д C++
rand C++
rand() C++
Rand() C++
Случайный и не случайный вывод чисел в одномерном массиве C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
laplas
15 / 11 / 1
Регистрация: 25.12.2010
Сообщений: 91
27.04.2012, 15:25     rand() не случайный #2
это значит, что одна твоя итерация быстрее делается,чем за одну секунду
вот так попробуй

C++
1
srand (time(0)|clock());
Humanoid
Почетный модератор
9818 / 3816 / 162
Регистрация: 12.06.2008
Сообщений: 11,426
27.04.2012, 15:26     rand() не случайный #3
Возможно, внутри rand_str() вызывается srand()
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
27.04.2012, 15:32  [ТС]     rand() не случайный #4
Цитата Сообщение от Humanoid Посмотреть сообщение
Возможно, внутри rand_str() вызывается srand()
Вы оказались правы!
интересно, чем второй вызов помешал?
Humanoid
Почетный модератор
9818 / 3816 / 162
Регистрация: 12.06.2008
Сообщений: 11,426
27.04.2012, 15:58     rand() не случайный #5
Цитата Сообщение от Gabberr Посмотреть сообщение
интересно, чем второй вызов помешал?
rand() высчитывается по определённой формуле. И использует для этого внутреннюю переменную. Именно для этого вначале вызывается srand(), что бы эту переменную привести в непредсказуемое состояние, что бы после этого rand() были по-настоящему случайными.
Для srand() ты передаёшь текущее время... значит, если в течении 1 секунды ты несколько раз вызовишь
C++
1
2
3
4
5
6
srand(time(NULL));
cout << rand();
srand(time(NULL));
cout << rand();
srand(time(NULL));
cout << rand();
То rand() будет возвращать всё время одно и тоже значение.
srand() установит внутреннюю переменную в значение time()... первый вызов rand() на основе этого значения высчитает случайное значение и изменит эту переменную, что бы следующий rand() отличался и был бы случайным. Но в следующий раз мы опять вызываем srand() и опять эту внутреннюю переменную устанавливаем в тоже самое значение. Поэтому и следующий rand() будет рассчитывать случайное число на основе того же самого значения.

Во, сколько бреда понапиал
Проще говоря, srand() должен вызываться только один раз в программе.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
27.04.2012, 16:11  [ТС]     rand() не случайный #6
Понятно, разобрался!
Yandex
Объявления
27.04.2012, 16:11     rand() не случайный
Ответ Создать тему
Опции темы

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