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

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

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

rand() & srand() - C++

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

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

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...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) - C++
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H #include &lt;string&gt; class A { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
schdub
2946 / 1291 / 238
Регистрация: 19.01.2009
Сообщений: 3,395
Завершенные тесты: 1
10.10.2009, 16:52 #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 минут
Пояснения нужны?
1
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
10.10.2009, 16:54 #3
2polivets: Ты думаешь автор понял этот код ?
одно очевидно что один из них берет время системы
Не очевидно и не берет
0
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 17:15  [ТС] #4
_ptiddata-?
_getptd();-?
никак не могу найти...
#include <cruntime.h>
#include <mtdll.h>
не открывает...

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

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

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

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

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

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

Если тебе нужен алгоритм посложнее, то могу запостить.
2
CAYOT
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
10.10.2009, 21:41  [ТС] #8
spasibo
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2009, 21:41
Привет! Вот еще темы с ответами:

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.10.2009, 21:41
Ответ Создать тему
Опции темы

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