Random в С++

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Random в С++

.

BBB » 08 апр 2008, 13:00

Vovchik писал(а):ROBOT_rus, а ты в mein() в начале напиши randomize(); ето команда запускает генератор случайных чисел а потом командой rand()%(число) ты выбераеш границу от 0 до (число)-1 !!!! :D :D
Угу. А самые умные сейчас пойдут грузить чугуний (c)

1) Нет в MS C++ ф-ии randomize();
2)
BBB писал(а):rand не имеет параметров:

The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

Re: Random в С++

Vovchik » 08 апр 2008, 10:20

ROBOT_rus, а ты в mein() в начале напиши randomize(); ето команда запускает генератор случайных чисел а потом командой rand()%(число) ты выбераеш границу от 0 до (число)-1 !!!! :D :D

Re: Random в С++

BBB » 08 апр 2008, 09:50

Albor писал(а):Наверное нужно пояснить, что инициализация генератора функцией time с параметром NULL, приводит к генерации каждый раз разной последовательности, так как данная функция, возвращает, по-моему, текущее время в милисекундах ....
MSDN дает следующее описание. Время, таки, оказалось в секундах, [s]прошедших со времен царя Гороха[/s] считая от полуночи January 1, 1970:

Код: Выделить всё

[b]time[/b]
Gets the system time.

[b]time_t time( time_t *timer );[/b]

[b]Parameter[/b]

[i]timer[/i] - Storage location for time

[b]Remarks[/b]

The [b]time[/b] function returns the number of seconds elapsed since midnight
(00:00:00), January 1, 1970, coordinated universal time, according to the
system clock. The return value is stored in the location given by [i]timer[/i]. This
parameter may be [b]NULL[/b], in which case the return value is not stored.

Re: Random в С++

Albor » 07 апр 2008, 18:29

Наверное нужно пояснить, что инициализация генератора функцией time с параметром NULL, приводит к генерации каждый раз разной последовательности, так как данная функция, возвращает, по-моему, текущее время в милисекундах - значит srand, при каждом запуске программы будет получать число, отличное от предыдущих. А если в srand передавать константу, то и результат всегда будет один и тот же.

Re: Random в С++

BBB » 04 апр 2008, 11:18

ROBOT_rus писал(а):Поставил srand , всёравно таже фигня - выдаёт каждый раз одни и теже значения.
..................................
Если поменять значение в srand(); то числа выводимые меняются) чтоже мне теперь каждый раз руками менять ?
BBB писал(а): http://msdn2.microsoft.com/en-us/library/398ax69y.aspx

(Там внизу страницы, к слову, неплохой пример есть, в частности, как получить число в нужном диапазоне, как инициализировать srand новым ["случайным"] числом:

// Seed the random-number generator with the current time so that
// the numbers will be different every time we run.
srand( (unsigned)time( NULL ) );

)
. .

Re: Random в С++

ROBOT_rus » 04 апр 2008, 10:06

Поставил srand , всёравно таже фигня - выдаёт каждый раз одни и теже значения.

Код: Выделить всё

#include <iostream.h>
#include <stdlib.h>

int GetRandom(int rand_count) 
{
	for (int i =0;i < rand_count; i++)
	{
		cout << rand() << endl;
	}
	return rand_count;
}

void main()
{
	srand(10);
	GetRandom ( 10 );
}


Если поменять значение в srand(); то числа выводимые меняются) чтоже мне теперь каждый раз руками менять ?

Re: Random в С++

Stock » 04 апр 2008, 00:14

могу предложить еще такой вариант:
сначала
srand(time(NULL));
потом можно использовать rand()
каждый раз будет генерироватся случайное число

Re: Random в С++

ROBOT_rus » 02 апр 2008, 17:23

Спасибо BBB буду разбираться,незнал что всё так запутано

Re: Random в С++

Albor » 02 апр 2008, 15:21

Небольшое дополнение сообщения от ВВВ: Для получения числа в заданном диапазоне нужно вспомнить об остатке от деления, который всегда меньше делителя.

.

BBB » 02 апр 2008, 10:47

ROBOT_rus писал(а):Теперь компилятор не ругается,но всёравно лажа какаято))
..........
Каждый раз выпадает число 71 (все разы...не меняется блин)
"А кто тебе сказал, что оно стихийное? Может, это я, когда кран тебе ставил, то на две крутки его недокрутил и на две винтки недовинтил." ((c) А.И.Райкин)

Я в том смысле, что это не "лажа", а "так и должно быть".
1) Непонятен смысл цикла, в котором 10 раз выводится ОДНО И ТО ЖЕ ЧИСЛО. Вызов rand() происходит лишь однажды.

2) Но если бы вызов rand() делался бы несколько раз, то при каждом новом запуске программа выдавала бы ОДИНАКОВУЮ серию (последовательность) чисел. Потому что инициализация генератора псевдостучайных чисел происходила бы каждый раз одним и тем же числом.

И (обратите внимание!) параметр ф-ии srand - это не верхняя граница диапазона возвращаемых чисел, а число-инициализатор последовательности.

Смотрите описание ф-ии srand в MSDN:
http://msdn2.microsoft.com/en-us/library/f0d4wb4t.aspx

Т.е. для получения каждый раз новой последовательности, надо передавать параметром в srand какое-то новое число.

А диапазон возвращаемых чисел ф-ей rand - от 0 до RAND_MAX (32767):
http://msdn2.microsoft.com/en-us/library/398ax69y.aspx

(Там внизу страницы, к слову, неплохой пример есть, в частности, как получить число в нужном диапазоне, как инициализировать srand новым ["случайным"] числом:

// Seed the random-number generator with the current time so that
// the numbers will be different every time we run.
srand( (unsigned)time( NULL ) );

)

Вернуться к началу