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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.82
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
#1

Что делает функция srand? - C++

04.08.2010, 18:29. Просмотров 4096. Ответов 4
Метки нет (Все метки)

референсы говорят что нужен srand() что бы rand() работал и давал разные значения каждый раз, но я его не использовал, но все равно всё ок рандом выдается каждый раз разный Оо а был ли смысл srand() ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 18:29     Что делает функция srand?
Посмотрите здесь:

Что делает функция C++
что делает функция? C++
C++ Что делает функция getline
Что делает функция strcat(t, f) C++
Что делает функция strcmp(s1,s2) ? C++
C++ Что делает функция strlen() ?
C++ Что делает функция wsprintf?
C++ Объясните что делает эта программа (for,rand,srand)
Что делает эта функция? C++
C++ Что делает функция weird_thing.
C++ Что делает функция time?
C++ Что делает функция?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
04.08.2010, 18:38     Что делает функция srand? #2
Owyn, да ну?!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
/* #include <time.h> */
 
int main(void){
    int i;
 
    /* srand(time(NULL)); */
 
    for ( i = 0; i < 10; ++i )
        printf("%d ", rand() % 100);
    printf("\n");
 
    return 0;
}
Что делает функция srand?
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 18:48  [ТС]     Что делает функция srand? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <windows.h>
#include <stdio.h>
#include <shlobj.h>
 
void func()
{
 float max = 15.6;
 float min = 18.6;
 for(i = 0; i < 41; i++)
 {
     float result_f = ((max-min)*((float)rand()/RAND_MAX))+min;
     logfile_f("(rand gave %f)\n", result_f);
 }
}
(rand gave 15.603754)
(rand gave 17.290756)
(rand gave 16.179913)
(rand gave 18.026222)
(rand gave 17.355028)
(rand gave 17.039619)
(rand gave 16.650875)
(rand gave 18.287888)
(rand gave 18.068520)
(rand gave 17.839815)
(rand gave 16.122324)
(rand gave 18.176830)
(rand gave 17.731504)
(rand gave 17.140606)
(rand gave 16.511986)
(rand gave 15.644954)
(rand gave 15.874209)
(rand gave 16.693356)
(rand gave 16.041939)
(rand gave 16.097696)
(rand gave 18.565575)
(rand gave 16.937077)
(rand gave 15.957250)
(rand gave 15.614008)
(rand gave 15.626735)
(rand gave 16.733641)
(rand gave 17.194988)
(rand gave 17.313553)
(rand gave 17.405293)
(rand gave 17.421497)
(rand gave 16.098703)
(rand gave 17.589136)
(rand gave 16.952368)
(rand gave 16.656368)
(rand gave 15.771117)
(rand gave 17.423054)
(rand gave 17.949957)
(rand gave 18.007820)
(rand gave 17.159649)
(rand gave 16.505852)
Nameless One
Эксперт С++
 Аватар для Nameless One
5761 / 3410 / 255
Регистрация: 08.02.2010
Сообщений: 7,412
04.08.2010, 19:01     Что делает функция srand? #4
Owyn, насколько я понимаю, псевдослучайное число вычисляется по такому алгоритму.
Пусть С1 и С2 - некоторые константы, seed - зерно псевдослучайной последовательности. Тогда тело функции rand() могло бы выглядеть так:
C
1
2
3
4
5
int rand()
{
    seed = seed*C1 + C2;
    return seed;
}
Переменная seed имеет фиксированное значение. Значит, при каждом запуске программы будет генерироваться одна и та же последовательность псевдослучайных чисел.
А srand позволяет инициализировать зерно seed системным временем. Т.е., если ты запишешь в начале программы srand(time(NULL)) (инициализация зерна текущим временем), то можно считать, что при каждом запуске у тебя будет генерироваться уникальная последовательность

Добавлено через 11 минут
Нашел на просторах Интернета:
Генератор ANSI-C был опубликован комиссией как 'пример'. Мы его тоже приводим, но как 'не рекомендованный' для серьезных приложений.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* (в модуле stdlib.h) */
#define RAND_MAX 32767
 
/* "пример" от комитета ANSI-C */
unsigned long next=1;
 
int rand(void) {
 next=next*1103515245+12345;
 return((unsigned int)(next/65536)%32768);
}
 
void srand(unsigned int seed) {
 next=seed;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 20:41     Что делает функция srand? #5
Owyn, а теперь запустите программу еще раз и найдите 10 отличий.
Yandex
Объявления
04.08.2010, 20:41     Что делает функция srand?
Ответ Создать тему
Опции темы

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