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

Как сделать чтобы каждый раз рандомное число менялось? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 11:49     Как сделать чтобы каждый раз рандомное число менялось? #1
Вопрос таков: Как сделать чтобы каждый раз рандомное число менялось? И каким образом или на каком этапе "выбирается" это число, т.к сколько бы раз я не компилировал всегда выводится 42.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int n,m;
n=rand()%100+1;
cout<<"Enter number m=";
cin>>m;
cout<<"n="<<n<<": ";
if(m>n) cout<<"your number is greater!\n";  
else if (n>m) cout<<"your number is less!\n";
else cout<<"you have guessed right!\n";
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2014, 11:49     Как сделать чтобы каждый раз рандомное число менялось?
Посмотрите здесь:

C++ Как сделать так чтобы число выводилось десятичной дробью
Как сделать чтобы при создании массива его имя менялось? C++
C++ Вывод значения элемента массива рандомное число раз
Как сделать так, чтобы в массив вводилось, рэндомно, НЕ целочисленное число???? C++
C++ Можно сделать так чтобы каждый раз не вводить матрицу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.07.2014, 11:52     Как сделать чтобы каждый раз рандомное число менялось? #2
srand тебе в руки
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 12:17  [ТС]     Как сделать чтобы каждый раз рандомное число менялось? #3
спс, но все равно как я понял тут без time не обойтись
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.07.2014, 12:30     Как сделать чтобы каждый раз рандомное число менялось? #4
Цитата Сообщение от Fobos315 Посмотреть сообщение
но все равно как я понял тут без time не обойтись
srand() инициализирует генератор псевдо-случайных чисел переданным числом.
Если нужно получать разные последовательности м/у запусками, то первое что приходит на ум, это, конечно же, время. Но можно использовать и любое другое значение, которое может меняться от запуска к запуску. Например:
- попросить пользователя ввести число;
- время пинга до какого-нибудь сервера;
- размер свободной памяти в системе;
... и т.д.
CyberSolver
 Аватар для CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
24.07.2014, 12:40     Как сделать чтобы каждый раз рандомное число менялось? #5
Именно. Стандартный способ - вызов
C++
1
srand(time(NULL));
Не забывайте - числа псевдослучайные, так что rand() всегда будет возвращать одно и то же. Единственный способ - как-то менять затравку, на что и нужен вызов time.

Всегда ваш К.О.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.07.2014, 12:41     Как сделать чтобы каждый раз рандомное число менялось? #6
Цитата Сообщение от Fobos315 Посмотреть сообщение
но все равно как я понял тут без time не обойтись
И? Не обходись без time, в чем проблема?
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 14:07  [ТС]     Как сделать чтобы каждый раз рандомное число менялось? #7
Тогда с чем связано то что у меня получилось точь в точь как и написано. Вероятность совпадения из 8 случаев что будет тоже самое очень маленькая. Почему они посчитали что вероятность что будет 1 = 0.25. Может речь идет о каких либо приоритетах? Причем вывод был сделан после запуска программы а ведь могло из 8 раз примерно раз 5 показать единицу, это не значит что шанс что будет единица выше чем 2 и 3. ? см. вложение
Миниатюры
Как сделать чтобы каждый раз рандомное число менялось?  
frostyfull
31 / 31 / 8
Регистрация: 13.06.2014
Сообщений: 508
24.07.2014, 14:15     Как сделать чтобы каждый раз рандомное число менялось? #8
Fobos315, простите, что?
Как не сложно догадаться вероятность была посчитана исходя из одного запуска программы и не по теории вероятности, а по факту
Т.к. из 8 раз единица выпала 2 раза, то вероятность 25% или же просто 0.25
Но суть вопроса я все равно не понял
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 17:42  [ТС]     Как сделать чтобы каждый раз рандомное число менялось? #9
frostyfull суть в том как могло получиться что пример приведенный в статье про рамндомное число полностью совпал с моим (т.е ответы одни и те же из 8 предложенных)
frostyfull
31 / 31 / 8
Регистрация: 13.06.2014
Сообщений: 508
24.07.2014, 17:56     Как сделать чтобы каждый раз рандомное число менялось? #10
Fobos315, при написании такой же программы, если рандом работает правильно, у тебя шанс около 33% получить такой же ответ, а вот если при каждом запуске программы точно также получается, то это уже косяк
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.07.2014, 18:00     Как сделать чтобы каждый раз рандомное число менялось? #11
Цитата Сообщение от frostyfull Посмотреть сообщение
то это уже косяк
Почему косяк? если srand() не вызывается в разным значением при каждом запуске, то логично получать каждый раз ту же самую последовательность.
Если стандартную библиотеку конечно не поменять на другую между запусками
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,923
24.07.2014, 18:01     Как сделать чтобы каждый раз рандомное число менялось? #12
Fobos315, вам-же уже ответили:
Как сделать чтобы каждый раз рандомное число менялось?
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 18:32  [ТС]     Как сделать чтобы каждый раз рандомное число менялось? #13
Tulosba это понятно. Мне не понятно то что когда привели пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    cout << "1-random number = " << 1 + rand() % 3 << endl; // первый запуск генератора случайных чисел
    cout << "2-random number = " << 1 + rand() % 3 << endl; // второй запуск генератора случайных чисел
    cout << "3-random number = " << 1 + rand() % 3 << endl; // третий запуск генератора случайных чисел
    cout << "4-random number = " << 1 + rand() % 3 << endl; // четвёртый запуск генератора случайных чисел
    cout << "5-random number = " << 1 + rand() % 3 << endl; // пятый запуск генератора случайных чисел
    cout << "6-random number = " << 1 + rand() % 3 << endl; // шестой запуск генератора случайных чисел
    cout << "7-random number = " << 1 + rand() % 3 << endl; // седьмой запуск генератора случайных чисел
    cout << "8-random number = " << 1 + rand() % 3 << endl; // восьмой запуск генератора случайных чисел
    system("pause");
    return 0;
}
У них получилось: 3,3,2,2,3,2,1,1.
Когда запустил я, получилось тоже самое. Почему так? Почему не 1,2,3,1,1,2...
Понятно что при повторном запуске я буду получать тоже самое.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.07.2014, 18:39     Как сделать чтобы каждый раз рандомное число менялось? #14
Fobos315, разные компиляторы с разными библиотеками могут давать разные результаты. И наоборот: одинаковые либы - одинаковые результаты.
frostyfull
31 / 31 / 8
Регистрация: 13.06.2014
Сообщений: 508
25.07.2014, 10:38     Как сделать чтобы каждый раз рандомное число менялось? #15
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему косяк? если srand() не вызывается в разным значением при каждом запуске, то логично получать каждый раз ту же самую последовательность.
Если стандартную библиотеку конечно не поменять на другую между запусками
Я просто не знаю как у тебя, но когда я писал не так давно программу с рандомом, у меня все работало прекрасно, и при каждом запуске все значения были разными
Если сильно надо могу прошерстить свои исходники и кинуть код как я делал рандом
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.07.2014, 10:50     Как сделать чтобы каждый раз рандомное число менялось? #16
Цитата Сообщение от frostyfull Посмотреть сообщение
и при каждом запуске все значения были разными
Без вызова srand()?
frostyfull
31 / 31 / 8
Регистрация: 13.06.2014
Сообщений: 508
25.07.2014, 11:55     Как сделать чтобы каждый раз рандомное число менялось? #17
Tulosba, я не смог найти старый исходник, но накорябал простейшую программу для проверки работы рандома
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <conio.h>
#include <time.h>
#include <iostream>
using namespace std;
 
void main(void)
{
    int a[10];
    srand(time(NULL));
    for (int i = 0; i < 10; i++)
    {
        a[i] = rand() % 10;
        cout << a[i] << endl;
    }
    _getch();
}
все прекрасно пашет
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.07.2014, 12:07     Как сделать чтобы каждый раз рандомное число менялось? #18
Цитата Сообщение от frostyfull Посмотреть сообщение
все прекрасно пашет
Вы мои сообщения вообще читаете?
Цитата Сообщение от Tulosba Посмотреть сообщение
Без вызова srand()?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2014, 14:50     Как сделать чтобы каждый раз рандомное число менялось?
Еще ссылки по теме:

C++ Как сделать, чтобы в char было hex число
C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
C++ Как задать рандомное число от 200 до 800?

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

Или воспользуйтесь поиском по форуму:
frostyfull
31 / 31 / 8
Регистрация: 13.06.2014
Сообщений: 508
25.07.2014, 14:50     Как сделать чтобы каждый раз рандомное число менялось? #19
Tulosba, да я уже не помню, в чем суть темы была) а перечитывать все посты не особо хочется

Добавлено через 6 минут
дак я вот не понял, у автора боязнь функции srand() всесте с таймом или что?
Yandex
Объявления
25.07.2014, 14:50     Как сделать чтобы каждый раз рандомное число менялось?
Ответ Создать тему
Опции темы

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