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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
08.08.2012, 17:12     Случайные(псевдослучайные) числа #1
Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же.

Возникла у меня проблема с получением большого кол-ва случайных(точнее псвдослучайных) чисел, которые меньше 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++
Случайные числа C++
C++ Случайные числа
C++ Случайные числа.
случайные числа C++
C++ Случайные числа от -8 к 8
C++ Случайные числа
C++ Случайные или псевдослучайные числа?
Случайные числа от 1 до 9 C++
C++ Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 17:19     Случайные(псевдослучайные) числа #2
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
srand(clock());
вынеси из цикла
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
08.08.2012, 17:21  [ТС]     Случайные(псевдослучайные) числа #3
Спасибо, помогло.Скажи пожалуйста, а почему в цикле нельзя?Я что-то не понимаю...
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,232
Записей в блоге: 3
08.08.2012, 17:22     Случайные(псевдослучайные) числа #4
ZaMaZaN4iK, видите ли, функция srand выполняет "инициализацию" генератора случайных чисел. То есть ее нужно вызывать однократно. Как правило это делается в самом начале программы.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 17:26     Случайные(псевдослучайные) числа #5
генерируются же псевдослучайные(!) числа,для их генерации нужно какое-то число,от которого мы отталкиваемся,если можно так сказать,вот один раз и задаём такое число
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.08.2012, 18:44     Случайные(псевдослучайные) числа #6
Цитата Сообщение от alexey31415 Посмотреть сообщение
генерируются же псевдослучайные(!) числа,для их генерации нужно какое-то число,от которого мы отталкиваемся,если можно так сказать,вот один раз и задаём такое число
собственно да, в сишном генераторе как правило используется линейный конгруэнтный метод. Для него нужно некоторое начало отсчета
переинициализировать генератор в процессе работы - не очень осмысленная идея
Yandex
Объявления
08.08.2012, 18:44     Случайные(псевдослучайные) числа
Ответ Создать тему
Опции темы

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