Random в С++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

ROBOT_rus
Сообщения: 8
Зарегистрирован: 05 мар 2008, 17:37

01 апр 2008, 08:41

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

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

что делать?)) Может какие .h подключать нада? Или как?
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

01 апр 2008, 10:32

Я так понимаю, эти ф-ии еще и компилятор-зависимые.

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

А в Microsoft C++: srand и rand
ROBOT_rus
Сообщения: 8
Зарегистрирован: 05 мар 2008, 17:37

01 апр 2008, 13:32

Использую Visual c++ 6

пишу

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

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

void main()
{
	int x=rand(10);
	cout << x;
}
вылезает таже ошибко про undeclared indentifier
airyashov
Сообщения: 416
Зарегистрирован: 02 ноя 2007, 10:31

01 апр 2008, 13:46

читай 2 STDLIB.H
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

01 апр 2008, 14:07

:) Следующий текст ошибки, по-видимому, будет:

'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.
ROBOT_rus
Сообщения: 8
Зарегистрирован: 05 мар 2008, 17:37

01 апр 2008, 19:41

Теперь компилятор не ругается,но всёравно лажа какаято))

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

#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-вопрос конечно наверняка лёгкий и глупый,но я самоучка (пытаюсь точнее),так что сильно не пинайте
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

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 ) );

)
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

02 апр 2008, 15:21

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

02 апр 2008, 17:23

Спасибо BBB буду разбираться,незнал что всё так запутано
Stock
Сообщения: 17
Зарегистрирован: 06 мар 2007, 04:48
Контактная информация:

04 апр 2008, 00:14

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