Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.97
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
#1

rand() & srand() - C++

10.10.2009, 15:51. Просмотров 8266. Ответов 7
Метки нет (Все метки)

кто знает как работает пара функции rand() и srand().
я знаю как это пара функци работает.мне всегда интересовало как это зделано .одно очевидно что один из них берет время системы.а как они связаны не понимаю
может быть кто то понял как это все работает?объясните пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2009, 15:51     rand() & srand()
Посмотрите здесь:

rand, srand и т.д - C++
Дана целочисленная матрица A (N,M), в которой имеются ровно два одинаковых элемента. Найти индексы этих элементов. Вопрос: можно ли...

srand и rand - C++
Здравствуйте. Надо заполнить массив единицами и нулями. srand (time (NULL)); for (int i=0; i<size; i++){ val=rand()%2; } ...

srand(), rand() и их seed - C++
Пишу класс, объекты которого представляют из себя трехмерные модели планет. Для того что бы разнообразить ландшафт использую алгоритм,...

Различия srand() и rand() - C++
Привет, форумчане! Изучаю с++шник, внезапно появился нездоровый интерес. Чем srand() отличается от rand()? Знаю, что srand() генерирует...

Объясните что делает эта программа (for,rand,srand) - C++
Пожалуйста объясните что делает эта программа. Поподробней про for(i=1;i<=5;i++) , a=rand()%(20-10+1)+10; и b=b+a;c=b/i; #include...

Srand - C++
что делает srand? (наприме: srand(static_cast<unsigned int>(time(0))); )

Srand - C++
есть кусок кода: srand(time(NULL)); for (jeka = 0; jeka < 100000; jeka++) { jora = rand() % 9; cout << jora << " "; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
10.10.2009, 16:52     rand() & srand() #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/***
*rand.c - генератор случайных чисел
*
*       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
*
*Описание:
*       defines rand(), srand() - генератор случайных чисел
*
*******************************************************************************/
 
#include <cruntime.h>
#include <mtdll.h>
#include <stddef.h>
#include <stdlib.h>
 
#ifndef _MT
static long holdrand = 1L;
#endif  /* _MT */
 
/***
*void srand(seed) - начальное значение ГСЧ
*
*Назначение:
*       Установка указанного в параметре начального значения генератора случайных
*       чисел. Адаптирован из BASIC.
*
*Параметры:
*       unsigned seed - начальное значение
*
*Выход:
*       нет.
*
*Исключения:
*
*******************************************************************************/
 
void __cdecl srand (
        unsigned int seed
        )
{
#ifdef _MT
 
        _getptd()->_holdrand = (unsigned long)seed;
 
#else  /* _MT */
        holdrand = (long)seed;
#endif  /* _MT */
}
 
 
/***
*int rand() - возвращает случайное число
*
*Назначение:
*       возвращает псевдо-случайное число в интервале 0 до 32767.
*
*Параметры:
*       None.
*
*Выход:
*       возвращает псевдо-случайное число в интервале 0 до 32767.
*
*Исключения:
*
*******************************************************************************/
 
int __cdecl rand (
        void
        )
{
#ifdef _MT
 
        _ptiddata ptd = _getptd();
 
        return( ((ptd->_holdrand = ptd->_holdrand * 214013L
            + 2531011L) >> 16) & 0x7fff );
 
#else  /* _MT */
        return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
#endif  /* _MT */
}
Добавлено через 6 минут
Пояснения нужны?
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.10.2009, 16:54     rand() & srand() #3
2polivets: Ты думаешь автор понял этот код ?
одно очевидно что один из них берет время системы
Не очевидно и не берет
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 17:15  [ТС]     rand() & srand() #4
_ptiddata-?
_getptd();-?
никак не могу найти...
#include <cruntime.h>
#include <mtdll.h>
не открывает...

>>2polivets: Ты думаешь автор понял этот код ?
>>
>>Цитата:
>>одно очевидно что один из них берет время системы
>>
>>Не очевидно и не берет

представ себе я понял..но не все...
не берет сам даешь этим путем srand(time(NULL));

_MT-в каком header file этот define?и что оно означает?

Добавлено через 2 минуты
и кстати до этого кода я тоже докопался...s F11..
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.10.2009, 18:11     rand() & srand() #5
MT - это видимо multithread, если тебе это о чем-нибудь говорит
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 19:02  [ТС]     rand() & srand() #6
нет жаль но не говорить...объясни пожалуйста
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
10.10.2009, 19:42     rand() & srand() #7
Цитата Сообщение от odip Посмотреть сообщение
Ты думаешь автор понял этот код ?
2odip а чего тут не понятного-то. Лучший мануал для программера - это исходник.

_ptiddata- это указатель на сруктуру с инфой о треде
_tiddata - соответсвено сама структура здоровенная такая (mtdll.h)
_getptd() - функция, возвращающая указатель на энту структуру, для треда из которого она запущена.

декларация символа _MT на сам алгоритм вообще, просто для каждого треда число от которого начинает плясать ГСЧ хранятся в этой структуре. Самые главные это строки 47 и 80 - могли бы заменить вызовы функция srand() и rand(), ну и конечно статик переменную не забыть объявить, чтобы хранить сид.

Если тебе нужен алгоритм посложнее, то могу запостить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2009, 21:41     rand() & srand()
Еще ссылки по теме:

srand - C++
что значит строка? srand((unsigned)time(NULL);

Srand - C++
Нужно сделать так чтобы начальное значение Srand было не от времени а от тактовой частоты процессора, подскажите как сделать

Функция srand() - C++
Доброе время суток, уважаемые программисты. Подскажите пожалуйста, сейчас пытаюсь реализовать игру блэк джек(очко, если по нашему). И вот...

srand(time(0)) - C++
Тут встретил такое выражение. Вы не скажете, что оно даёт, и как расшифровать этот код #include &lt;iostream&gt; #include &lt;time.h&gt; ...

srand не компилится - C++
void Client::InitializeRandSessionKey() { srand(time(NULL)); randSessionKey=rand()%100; } 1&gt;h:\wmf\wmf\wmf\main.cpp(25) :...


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

Или воспользуйтесь поиском по форуму:
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 21:41  [ТС]     rand() & srand() #8
spasibo
Yandex
Объявления
10.10.2009, 21:41     rand() & srand()
Ответ Создать тему
Опции темы

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