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

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

Войти
Регистрация
Восстановить пароль
 
karzuan
1 / 1 / 0
Регистрация: 06.05.2013
Сообщений: 16
#1

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

18.06.2014, 01:49. Просмотров 288. Ответов 7
Метки нет (Все метки)

Доброго времени суток!

хочу поделиться негодованием по поводу работы всем знакомой функции 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: я не волшебник, я еще только учусь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 01:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Randome number в функции (C++):

Calculate total number of operations needed to convert a number from origin to sigle digit - C++
To predict person's fate, numerologist takes time of a person's life in seconds,then adds all it's digits together. If that sum of digits...

Функции (find out the array in which total number of positive elements is bigger) - C++
You given two one-dimention arrays with N numbers inside. You task is to find out the array in which total number of positive elements is...

Given a year number. Output the number of days of that year - C++
Помогите решить! Given a year number. Output the number of days of that year. Example: Input: 1900 Output 365

Имплементация Number - C++
Хочу заимплементировать свои числа в С++. Подскажите наводящие темы и статьи. Смысл в динамическом увеличении количества битов для числа...

create a number - C++
Добрый всем вечер!Затрудняюсь написать программу,которая запрашивает у пользователя число.Задача: - подсчитать количество разрядов...

Number of days in a year - C++
Given a year number. Output the number of days of that year. Example: Input: 1900 Output 365 Example: Input:

7
Renji
1925 / 1323 / 298
Регистрация: 05.06.2014
Сообщений: 3,808
18.06.2014, 01:58 #2
srand надо выполнять один раз, а не при каждом вызове rand.
0
Hrapvlesu
11 / 11 / 2
Регистрация: 08.06.2012
Сообщений: 28
18.06.2014, 01:58 #3
Вынесите srand (time(NULL)) из вашей функции и перенесите в main(). Все будет работать.
0
BlackSpace
137 / 130 / 52
Регистрация: 15.03.2014
Сообщений: 277
18.06.2014, 02:17 #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 );
}
0
rikimaru2013
18.06.2014, 03:21
  #5

Не по теме:

del

0
BlackSpace
137 / 130 / 52
Регистрация: 15.03.2014
Сообщений: 277
18.06.2014, 03:28 #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;
}
0
rikimaru2013
18.06.2014, 03:49
  #7

Не по теме:

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

0
BlackSpace
18.06.2014, 04:16     Randome number в функции
  #8

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2014, 04:16
Привет! Вот еще темы с ответами:

Number of days in a year - C++
Given a year number. Output the number of days of that year. Example: Input: 1900 Output 365 Example: Input:

Expecting variable or number - C++
Недавно начал учить c++ компилятор gcc 4.8 под Freebsd 10 появляются ошибки: expecting variable or number Это серьезные ошибки? ...

Given natural number n. Calculate expression - C++
Помогите решить задачу плс парни! очень надо сегодня заканчивается Deadline Given natural number n. Calculate expression: Note that...

random number<<is the code true? - C++
# include &lt;iostream&gt; using namespace std; void main () { setlocale (LC_ALL,&quot;rus&quot;); int a,b,c,d,count; a = rand()%8+2; b =...


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

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

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