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

Randome number в функции - C++

Восстановить пароль Регистрация
 
karzuan
0 / 0 / 0
Регистрация: 06.05.2013
Сообщений: 16
18.06.2014, 01:49     Randome number в функции #1
Доброго времени суток!

хочу поделиться негодованием по поводу работы всем знакомой функции rand()
Начинал делать одно, но наткнулся на такую проблемку: поставил задачу забить массив случайными числами. НО если запихать rand() в отдельную функцию, то она выдает одно и тоже число! я так понимаю, что происходит это из-за привязки к системному времени, и так как заполнение происходит в короткий промежуток времени оно и не меняется. Но как же быть..... Может кто решал, есть волшебники С++?


*************DOESN'T_WORK*****************
************as well as the need****************
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
# include <iostream>
# include <stdlib.h>
# include <time.h>
# include <conio.h>
# include <cctype>
# include <cstring>
# include <cstdlib>
 
 
using namespace std;
int random ();
 
 
int main()
{
int arrM [20];
for (int i=0; i< 20; i++ )
 
    {
    arrM[i] =   random();
    cout<< arrM[i]<< ' ';
    
    } 
 
    return 0;
}
 
 
int random () 
        {
    srand (time(NULL));
    return  (rand () % 30) ;
    }

PS: я не волшебник, я еще только учусь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 01:49     Randome number в функции
Посмотрите здесь:

C++ Number of days in a year
create a number C++
C++ random number<<is the code true?
C++ Number of days in a year
Given a year number. Output the number of days of that year C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
18.06.2014, 01:58     Randome number в функции #2
srand надо выполнять один раз, а не при каждом вызове rand.
Hrapvlesu
11 / 11 / 2
Регистрация: 08.06.2012
Сообщений: 28
18.06.2014, 01:58     Randome number в функции #3
Вынесите srand (time(NULL)) из вашей функции и перенесите в main(). Все будет работать.
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
18.06.2014, 02:17     Randome number в функции #4
Функция srand() выполняет инициализацию генератора случайных чисел rand() и используется для установки начала последовательности, генерируемой функцией rand().
Результаты srand( time( NULL ) ) отличаются если вызовы происходят с разницей более 1 секунды, так как значение, возвращенное функцией time() отличается каждую секунду.

То есть в Вашем варианте Вы вызвали srand() 20 раз в течении короткого времени и каждый раз вам для функции rand() устанавливалось начало последовательности на одно и то же число и rand() брал это число.

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
# include <iostream>
# include <ctime>
# include <cstdlib>
 
using namespace std;
 
// random() - данное имя может быть уже использовано в заголовочных файлах некоторых компиляторов
int myrandom();
 
int main() {
    srand( time( NULL ) ); // вызывается один раз в программе
 
    int arrM[ 20 ];
    for ( int i = 0; i < 20; i++ )  {
        arrM[ i ] = myrandom(); // проще будет сразу rand() % 30, а не вызывать через функцию myrandom()
        cout << arrM[ i ] << ' ';
    }
 
    return 0;
}
 
int myrandom() {
    return ( rand() % 30 );
}
rikimaru2013
18.06.2014, 03:21
  #5

Не по теме:

del

BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
18.06.2014, 03:28     Randome number в функции #6
rikimaru2013, абсолютно не понял смысла Вашего вопроса. И откуда 100 секунд. Думаю, что Вы неверно поняли мое сообщение.

Если поочередно вызывать несколько раз srand( time( NULL ) ) и rand() % N, в течении времени менее 1 секунды, тогда результаты не будут отличаться.

Вот упрощенный пример того, что результаты не отличаются. Опять же все упирается во время 1 секунда.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# include <iostream>
# include <ctime>
# include <cstdlib>
 
using namespace std;
 
int main() {
 
 
    for ( int i = 0; i < 20; i++ )  {
        srand( time( NULL ) );
        cout << rand() % 30 << ' ';
    }
 
    return 0;
}
rikimaru2013
18.06.2014, 03:49
  #7

Не по теме:

я удалил сообщение сразу же как заметил, что не так прочитал. А ты на него отвечаешь.... . Займись чем-то )

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 04:16     Randome number в функции
Еще ссылки по теме:

C++ Given natural number n. Calculate expression
C++ Функции (find out the array in which total number of positive elements is bigger)
Expecting variable or number C++

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

Или воспользуйтесь поиском по форуму:
BlackSpace
18.06.2014, 04:16     Randome number в функции
  #8

Не по теме:

rikimaru2013, мне неоткуда было знать, что будете удалять сообщение вот и ответил. То что Вы удалили сообщение - увидел только что. Чем мне заниматься позвольте мне решать самому.

Yandex
Объявления
18.06.2014, 04:16     Randome number в функции
Ответ Создать тему
Опции темы

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