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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
#1

Случайные(псевдослучайные) числа - C++

08.08.2012, 17:12. Просмотров 1127. Ответов 5
Метки нет (Все метки)

Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же.

Возникла у меня проблема с получением большого кол-ва случайных(точнее псвдослучайных) чисел, которые меньше 10.Я прекрасно знаю про функцию rand() % 10, и знаю то, что ПЕРЕД ней надо юзать функцию srand().Но вот в чём прикол.Я всегда юзал srand(time(NULL)) в паре с rand() % 10, но при генерации более 1 числа эта фигня выдаёт одинаковые числа.Это всё из-за того, что time(NULL) возвращает какое-то там время в секундах, а оно при выполнении программы не меняется(прога работает оч быстро).Я попытался избежать этого, юзая srand(clock()).Это время измеряемое процессором в тактах от начала выполнения программы.Но блин, чё за фигня - и это время у меня чего то меняется как то малое кол-во раз.При получении 100 рандомных чисел все числа одинаковые.Но уже при получении чисел в кол-ве более 1000 уже видно не одно значение чисел, а 2.

Подскажите, почему так происходит.И подскажите метод получения псевдослучайных чисел такой, чтобы эти числа генерились постоянно разные, а не как у меня.

Вот код, на котором производятся тесты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <ctime>
 
using namespace std;
int a[10];
int main()
{
    int sot,eot,tempa;
    int n;
    for(n=0;n<10;n++)
    {
        srand(clock());
        a[n]=rand() % 10;
    }
    for(int i = 0; i < n; i++)
    {
        cout<<a[i]<<" ";
    } 
    system("pause");
}
заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 17:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Случайные(псевдослучайные) числа (C++):

Случайные или псевдослучайные числа? - C++
можно ли считать, такие числа случайными, если не знать какие операции и их последовательность производилось с переменной number? void...

Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа - C++
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; // кол-во элементов массива ...

Случайные числа в C++ - C++
нужно присвоить переменной числа от -50 до 50, как сделать?

Случайные числа - C++
Написать функцию, которая подсчитует сколько раз заданое число встречается в последовательности N случайных чисел.

Случайные числа от 1 до 9 - C++
Можно так создавать случайные числа от 1 до 9 void main() { srand(time(0)); for (int i = 0; i&lt;20; i++) { cout &lt;&lt;...

Случайные числа. - C++
Есть числа 2,4,6,8,0 - из них нужно случайно выбрать одно. Как это сделать? Google'ил, нашел только что то по типу #include &lt;stdlib.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 17:19 #2
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
srand(clock());
вынеси из цикла
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
08.08.2012, 17:21  [ТС] #3
Спасибо, помогло.Скажи пожалуйста, а почему в цикле нельзя?Я что-то не понимаю...
HighPredator
5477 / 1843 / 343
Регистрация: 10.12.2010
Сообщений: 5,435
Записей в блоге: 3
08.08.2012, 17:22 #4
ZaMaZaN4iK, видите ли, функция srand выполняет "инициализацию" генератора случайных чисел. То есть ее нужно вызывать однократно. Как правило это делается в самом начале программы.
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 17:26 #5
генерируются же псевдослучайные(!) числа,для их генерации нужно какое-то число,от которого мы отталкиваемся,если можно так сказать,вот один раз и задаём такое число
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.08.2012, 18:44 #6
Цитата Сообщение от alexey31415 Посмотреть сообщение
генерируются же псевдослучайные(!) числа,для их генерации нужно какое-то число,от которого мы отталкиваемся,если можно так сказать,вот один раз и задаём такое число
собственно да, в сишном генераторе как правило используется линейный конгруэнтный метод. Для него нужно некоторое начало отсчета
переинициализировать генератор в процессе работы - не очень осмысленная идея
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 18:44
Привет! Вот еще темы с ответами:

Случайные числа - C++
void rndChain(){ system(&quot;cls&quot;); SetConsoleTitleA(&quot;dovjina zrost vibirki&quot;); ...

Случайные числа - C++
Всем привет! Мне нужно сгенерировать действительное случайное число в диапазоне от нуля до 1. Читал вот это:...

Случайные числа - C++
Создать матрицу случайных чисел, если max элемент располагается левее минимального то тогда сложить элементы левой половинки матрицы.

Случайные числа от -10 до 10 - C++
сижу я значит и не могу вывести случайные числа от -10 до 10! Получается только от -50 до 50, for(int j= 0; j&lt;8; j++) ...


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

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

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