kostik012 Posted November 17, 2006 Report Share Posted November 17, 2006 Как использовать генератор случайных чисел в с++(в определенном интервале)? Знаю, что для этого применяется rand, но какую библиотеку надо подключить? А то у меня выдает ошибку rand undeclared identifier Link to comment Share on other sites More sharing options...
Delphi Posted November 17, 2006 Report Share Posted November 17, 2006 Как использовать генератор случайных чисел в с++(в определенном интервале)? Знаю, что для этого применяется rand, но какую библиотеку надо подключить? А то у меня выдает ошибку rand undeclared identifier насчет библиотеки неподскажу наверно math, а чтобы в определенном диапазоне к примеру 30-78 береш rand(48)+30 один из самых простых способов Link to comment Share on other sites More sharing options...
kostik012 Posted November 17, 2006 Author Report Share Posted November 17, 2006 Так и сделал. Пишет error C2660: 'rand' : function does not take 1 parameters Link to comment Share on other sites More sharing options...
Тролль Posted November 17, 2006 Report Share Posted November 17, 2006 (edited) kostik012: Вот для примера программка, генерирующая случайные (точнее, конечно, псевдослучайные) числа от 50 до 79 включительно (писал на DEV-C++). Выдает 10 таких чисел, для закрытия окна надо ввести 0 (или любое число). #include <iostream>#include <stdlib.h> #include <time.h> int main() { int j,k; srand( (unsigned)time( NULL ) ); for(int i=0; i<10; i++) { j=rand()%30+50; cout << j<<"\n"; } ; cout << "for exit enter 0 "; cin >> k; } P.S. Посмотрел еще раз и решил, хотя это не слишком важно, кое-что ненужное из примера выкинуть, вот его вторая версия: #include <iostream>#include <stdlib.h> #include <time.h> void main() { srand(unsigned(time(NULL))); for(int i=0; i<10; i++) cout << rand()%30+50 <<"\n"; system ("pause"); } Edited November 17, 2006 by Тролль Link to comment Share on other sites More sharing options...
daff9000 Posted September 11, 2008 Report Share Posted September 11, 2008 Объясните кто-нибудь пожалуйста механизм работы генератора случайных чисел... Link to comment Share on other sites More sharing options...
yuriks Posted September 11, 2008 Report Share Posted September 11, 2008 Там зашит конкретный алгоритм. То-есть последовательность чисел всегда будет одинаковой, все зависит только от места из которого ти начнеш. Поетому ети числа не случайные - а псевдослучайные Они просто соответствуют требованиям последовательности случайных чисел. Link to comment Share on other sites More sharing options...
Тролль Posted September 11, 2008 Report Share Posted September 11, 2008 (edited) Добавлю, что существует математическая теория функций, выдающих псевдослучайные числа. Как правило, используется так называемый линейный конгруентный метод генерации псевдослучайных чисел, потому что он самый быстрый. Каждое следующее псевдослучайное число вычисляется по предыдущему функцией x=(ax+c)%m, где a,c,m - заранее заданные константы. Чтобы еще больше приблизить статистические параметры получаемой псевдослучайной последовательности к параметрам "идеальной" чисто случайной последовательности, при этом в качестве выдаваемого псевдослучайного числа часто берутся только старшие биты результата. Выбор "хороших" констант определяется теорией, подробно теория изложена у Кнута в его трехтомнике "Искусство программирования" (фактически это учебник алгоритмов). Эти константы "зашиты" в стандартную функцию rand, в разных компиляторах они могут быть разными. Поскольку начальное значение x перед первым вызовом функции обычно нуль, последовательность псевдослучайных чисел у функции rand будет всегда одна и та же, если не менять начальное значение для rand при каждом запуске программы. Это начальное значение для rand может быть установлено отдельной функцией srand, а чтобы оно каждый раз было другим, в качестве аргумента функции srand обычно используется значение текущего времени. Edited September 11, 2008 by Тролль Link to comment Share on other sites More sharing options...
Recommended Posts