Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/188: Рейтинг темы: голосов - 188, средняя оценка - 4.77
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
1

Как сделать генератор случайных чисел?

04.10.2011, 06:48. Просмотров 34194. Ответов 34
Метки нет (Все метки)

Привет всем. Возник очередной вопрос за это утро.
Как сделать генератор случайных чисел?
В учебнике написано так:
"Для этого существует функция random(K) - генератор случайных чисел."
Учебник предлагает вначале написать так:
C++
1
randomize(); //Инициализация генератора случайных чисел
А потом уже использовать функцию
C++
1
random(K);
И дескать это будет целое число в интервале [0; K-1]

Я написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <conio.h> 
using namespace std;
int main() 
{
    randomize(); //Инициализация генератора случайных чисел
    cout<<random(10);
 
    cout<<endl; 
    getch();
    return 0; 
}
Думал, что он мне выведет целое число из отрезка [0; 9], а он выдал 2 ошибки:
error C3861: randomize: идентификатор не найден
error C3861: random: идентификатор не найден

Что мне делать? Подскажите.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2011, 06:48
Ответы с готовыми решениями:

Как сделать генератор случайных чисел?
как правильно сделать генератор случайных чисел?? Приведите пожалуйста примеры??

Как сделать быстрый генератор случайных чисел?
Доброго времени суток. Нашёл в сети пример, но меня не устраивает, что...

Генератор случайных чисел. Как прикрепить?
Как к генератору случайных чисел прикрепить &quot;Введите размер массива&quot;? #include...

Как создать генератор случайных чисел
Здравствуйте!Я работаю в dev c++ 4.9.9.2 киньте готовый исходник.Зарание...

Как написать генератор случайных чисел?
Помогите, пожалуйста, написать такой код! Добавлено через 8 минут Только...

34
Shman
5 / 5 / 6
Регистрация: 30.04.2012
Сообщений: 212
25.05.2012, 18:46 21
Ребята, почему когда я пишу строку "const N=10;" компилятор Dev выдает ошибку "ISO C++ forbids declaration of `N' with no type "?
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>  
#include <conio.h> 
#include <stdlib.h> 
#include <time.h> 
 
const N = 10; // Размер массива.
int main()
{
 int mass[N], i;
 
 srand(unsigned(time(NULL))); // Запуск генератора случайных чисел.
 printf("\n Massiv iz 10 chisel: \n"); // Массив из 10 чисел .
  for(i=0; i<N; i++)
  {
   mass[i]=rand(); // Генерируем случайные элемены массива...   
   printf("\n Mass[%d] = %d. ", i, mass[i]); // и выводим их.
  }
 
            
 getch(); 
 return 0; 
}
0
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
25.05.2012, 18:51 22
C++
1
const int N = 10;
0
Infinity3000
1060 / 579 / 87
Регистрация: 03.12.2009
Сообщений: 1,255
25.05.2012, 18:52 23
C++
1
const int N = 10; // Размер массива.
1
Aesonet
23 / 23 / 10
Регистрация: 04.04.2012
Сообщений: 119
25.05.2012, 19:00 24
const - это не тип числа, а определение что число будет неизменное (нужно если пишешь большую программу, чтобы не переназначить число.) Так что после const нужно вставить тип данных int, double, float и т.д.
1
MrGluck
Модератор
Эксперт CЭксперт С++
8084 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,392
25.05.2012, 19:44 25
Истинно случайные числа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
#include <iterator>
#include <random>
 
int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> uid(-10, 10);
    int a[10]; 
    std::generate(a, a + 10, [&uid, &gen] {return uid(gen); } );
    std::copy(a, a + 10, std::ostream_iterator<int> (std::cout, " ") );   
    return 0;
}
http://liveworkspace.org/code/6433d50dd46526030396f566b28e5543
0
Nameless One
Эксперт С++
5786 / 3435 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
26.05.2012, 04:44 26
Цитата Сообщение от MrGluck Посмотреть сообщение
Истинно случайные числа:
истинно случайные числа без специальных устройств не получишь
0
MrGluck
Модератор
Эксперт CЭксперт С++
8084 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,392
26.05.2012, 18:42 27
Цитата Сообщение от Nameless One Посмотреть сообщение
истинно случайные числа без специальных устройств не получишь
Класс random_device моделирует недетерминированный генератор истинно случайных чисел.
http://www.solarix.ru/for_developers...t_random.shtml

std::random_device is a uniformly-distributed integer random number generator, which produces non-deterministic random numbers, if a non-deterministic source (e.g. a hardware device) is available to the implementation.
http://en.cppreference.com/w/cpp/numeric/random/random_device

Или неперменно нужна рулетка и метод Монте-Карло?)
0
easybudda
26.05.2012, 20:15
  #28

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Или неперменно нужна рулетка и метод Монте-Карло?
Обезьяна и кубик с пронумерованными гранями тоже подойдут :)

0
Catstail
Модератор
23601 / 11702 / 2046
Регистрация: 12.02.2012
Сообщений: 19,088
26.05.2012, 20:30 29
1) Все, что выдают функции типа random, называются псевдослучайными числами. Истино случайные числа получают от физических датчиков. Но для приложений (Монте-Карло, к примеру) псевдослучайные числа вполне себе ничего...

Причем, если rnd() возвращает псевдослучайное из интервала [0,1], то его элементарно привести к любому интервалу [a,b] вот так: a+(b-a)*rnd(). Этих знаний для студентов вполне достаточно.

2) А вот как устроена функция rnd - вопрос интересный. Один из методов таков: берется многоразрядное целое, возводится в квадрат. У квадрата берется несколько средних разрядов (очередное случайное), снова возводится в квадрат и т.д. Метод называется "середина квадрата"
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
27.05.2012, 21:53 30
Цитата Сообщение от Alex Z Посмотреть сообщение
Как сделать генератор случайных чисел?
/dev/urandom можно читать.
0
grizlik78
Эксперт С++
1987 / 1480 / 191
Регистрация: 29.05.2011
Сообщений: 3,059
27.05.2012, 22:21 31
MrGluck, и всё-таки, какие же они истинно случайные, если для генерации чисел используется Вихрь Мерсенна? std::random_device использовался только для инициализации mt19937.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8084 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,392
27.05.2012, 22:32 32
Цитата Сообщение от grizlik78 Посмотреть сообщение
MrGluck, и всё-таки, какие же они истинно случайные, если для генерации чисел используется Вихрь Мерсенна? std::random_device использовался только для инициализации mt19937.
Я основывался на ссылках, которые привел в комментарии. А что вы еще предлагаете инициализировать, кроме как ГСЧ?
0
grizlik78
Эксперт С++
1987 / 1480 / 191
Регистрация: 29.05.2011
Сообщений: 3,059
27.05.2012, 22:37 33
Генератор истинно случайных чисел не требует инициализации. А mt19937 как и все алгоритмы получения чисел выдаёт псевдослучайную последовательность. И чтобы при каждом запуске получалась разная часть последовательности ГПСЧ надо инициализировать, от времени или от датчика истинно случайных чисел.
Так что если нужны истинно случайные числа, так и надо использовать rd, без привлечения псевдослучайных генераторов. Но устройства генерации случайных чисел могут быть не везде, и, как правило, они во много раз медленнее алгоритмов.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8084 / 4941 / 1431
Регистрация: 29.11.2010
Сообщений: 13,392
27.05.2012, 22:43 34
Цитата Сообщение от grizlik78 Посмотреть сообщение
Генератор истинно случайных чисел не требует инициализации. А mt19937 как и все алгоритмы получения чисел выдаёт псевдослучайную последовательность. И чтобы при каждом запуске получалась разная часть последовательности ГПСЧ надо инициализировать, от времени или от датчика истинно случайных чисел.
Так что если нужны истинно случайные числа, так и надо использовать rd, без привлечения псевдослучайных генераторов. Но устройства генерации случайных чисел могут быть не везде, и, как правило, они во много раз медленнее алгоритмов.
То что медленне, оно понятно. А как тогда генерировать ИСЧ? И в чем получается разница, если инициализировать gen( time(0) ) и gen( rd() ) ? В "качестве псвевдослучайности"?
0
grizlik78
Эксперт С++
1987 / 1480 / 191
Регистрация: 29.05.2011
Сообщений: 3,059
27.05.2012, 22:50 35
Цитата Сообщение от MrGluck Посмотреть сообщение
А как тогда генерировать ИСЧ?
rd()
Правда то, насколько они будут истинно случайными зависит от реализации "random device" операционной системой. Если, например, используется /dev/urandom, то генератор может получиться довольно быстрым, но не настолько случайным как иногда хотелось бы.

Цитата Сообщение от MrGluck Посмотреть сообщение
И в чем получается разница, если инициализировать gen( time(0) ) и gen( rd() )
Разница в том, что при использовании time(0) начальное состояние предсказуемо. И если между запусками меньше секунды, то может вообще повтор получиться. В случае с rd() начальное состояние предсказать очень сложно (или невозможно). Но последовательность получается одинаково псевдослучайной.
2
27.05.2012, 22:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2012, 22:50

Как создать генератор случайных чисел ?
Доброго всем времени суток. У меня возник вопрос, как создать генератор...

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

Генератор псевдо-случайных чисел, как хэш-функция
Анализируя генератор псевдослучайных чисел Я пришел к выводу, что (Учитывая...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

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