Страница 1 из 2

Random в С++

Добавлено: 01 апр 2008, 08:41
ROBOT_rus
Собсно как?)) Полазил в гугле - все советуют (например для random 0-99) int r=random(100);

Но я так пытался сделать-при компиляции вылезает ошибка про undeclared indentifier

что делать?)) Может какие .h подключать нада? Или как?

Re: Random в С++

Добавлено: 01 апр 2008, 10:32
BBB
Я так понимаю, эти ф-ии еще и компилятор-зависимые.

Например, в Borland C++ (хедер STDLIB.H) есть ф-ии random, rand, randomize, srand.

А в Microsoft C++: srand и rand

Re: Random в С++

Добавлено: 01 апр 2008, 13:32
ROBOT_rus
Использую Visual c++ 6

пишу

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

#include <iostream.h>
#include <math.h>

void main()
{
	int x=rand(10);
	cout << x;
}
вылезает таже ошибко про undeclared indentifier

Re: Random в С++

Добавлено: 01 апр 2008, 13:46
airyashov
читай 2 STDLIB.H

Re: Random в С++

Добавлено: 01 апр 2008, 14:07
BBB
:) Следующий текст ошибки, по-видимому, будет:

'rand' : function does not take 1 parameters

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 в С++

Добавлено: 01 апр 2008, 19:41
ROBOT_rus
Теперь компилятор не ругается,но всёравно лажа какаято))

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

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

void main()
{
	srand(10);
	int x=rand();
	for (int z = 0; z < 10; z++)
	{
		cout << x << endl;
	}

}
Каждый раз выпадает число 71 (все разы...не меняется блин)
Учитывая что я ставил srand(10) я расчитывал получить чтото в диапазоне 0-9. Чтото я явно нетак делаю ;) )


PS-вопрос конечно наверняка лёгкий и глупый,но я самоучка (пытаюсь точнее),так что сильно не пинайте

.

Добавлено: 02 апр 2008, 10:47
BBB
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 ) );

)

Re: Random в С++

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

Re: Random в С++

Добавлено: 02 апр 2008, 17:23
ROBOT_rus
Спасибо BBB буду разбираться,незнал что всё так запутано

Re: Random в С++

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