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

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

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

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

27.04.2012, 15:00. Просмотров 1148. Ответов 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]<<"; ";      
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 15:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос rand() не случайный (C++):

Случайный и не случайный вывод чисел в одномерном массиве - C++
Задача: Написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. В консольном приложении предусмотреть...

rand от 1 до 16 - C++
Вопрос в том как в функции rand() на c++ задать диапазон чисел от 1 до 16

rand()%(-20)%(20); - C++
Нужно сорт случ числа от -20 до 20 Делаю так rand()%(-20)%(20); получаю числа от 0 до 20, а мне нужно от -20 ;

rand - C++
всем привет) что означает вот это строка double value = (rand()%1000)/100.0 - 5.0; и чем она отличается от этой double value =...

rand() - C++
Как записать чтобы rand() возвращало true и false. Или подскажите другой способ. Мне нужно заполнить 3-х мерный массив.

rand() - C++
начал учить си++, наткнулся на такую штуку... Накидал простую программку (консольную) и увидел что датчик случ. чисел выдает нифига...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
laplas
15 / 11 / 1
Регистрация: 25.12.2010
Сообщений: 91
27.04.2012, 15:25 #2
это значит, что одна твоя итерация быстрее делается,чем за одну секунду
вот так попробуй

C++
1
srand (time(0)|clock());
0
Humanoid
Почетный модератор
9839 / 3840 / 165
Регистрация: 12.06.2008
Сообщений: 11,467
27.04.2012, 15:26 #3
Возможно, внутри rand_str() вызывается srand()
1
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
27.04.2012, 15:32  [ТС] #4
Цитата Сообщение от Humanoid Посмотреть сообщение
Возможно, внутри rand_str() вызывается srand()
Вы оказались правы!
интересно, чем второй вызов помешал?
0
Humanoid
Почетный модератор
9839 / 3840 / 165
Регистрация: 12.06.2008
Сообщений: 11,467
27.04.2012, 15:58 #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() должен вызываться только один раз в программе.
1
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
27.04.2012, 16:11  [ТС] #6
Понятно, разобрался!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 16:11
Привет! Вот еще темы с ответами:

Rand() - C++
metka: r1=rand()%2; r2=rand()%2; if(r1==a &amp;&amp; r2==b)goto metka; else arr=='O'; Собсно-это кусок кода...

rand() - C++
генератор случайных чисел rand() подскажите пожелуста как работает ета штука. что означает %200, %200-100. какой принцип роботы

rand - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; // гениратор случайных чисел using namespace std; ...

rand - C++
srand(time(NULL)); int s = rand()%1000 +1; генерирует бред вроде 3,4,7,10,14,19,21,26,29... как сделать чтобы значения были...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2012, 16:11
Ответ Создать тему
Опции темы

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