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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
#1

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

24.07.2014, 11:49. Просмотров 2221. Ответов 18
Метки нет (Все метки)

Вопрос таков: Как сделать чтобы каждый раз рандомное число менялось? И каким образом или на каком этапе "выбирается" это число, т.к сколько бы раз я не компилировал всегда выводится 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2014, 11:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать чтобы каждый раз рандомное число менялось? (C++):

Как сделать чтобы при создании массива его имя менялось? - C++
Вот есть такая функция: void UniqueCollection (int x1, int y1, int x2, int y2) { int Values = 4; int *Collection; Collection =...

Можно сделать так чтобы каждый раз не вводить матрицу? - C++
Надо написать программу,но сначала я хочу попробовать на примере, но матрица слишком большая и хотелось бы чтоб не каждый раз набирать...

Вывод значения элемента массива рандомное число раз - C++
Как вывести значение элемента массива i раз, при условии что i это рандом с заданным диапазоном. пробовал так: if (i &gt; 0) ...

Как сделать, чтобы цикл повторялся столько раз, сколько забито в переменной? - C++
Как сделать, чтобы цикл повторялся столько раз, сколько забито в переменной? Например переменная a=5, и цикл должен повторится 5 раз

Как сделать что бы число зарандомилось один раз - C++
srand ( time(0) ); int balans=rand()%50+0; int count; cin&gt;&gt;count; switch(count) { case 1: ...

Как сделать так чтобы считывался пробел и не выводились несколько раз повторенные символы - C++
Как сделать так чтобы считывался пробел и не выводились несколько раз повторенные символы Вот код программы: #include&lt;string.h&gt; ...

18
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
24.07.2014, 11:52 #2
srand тебе в руки
0
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 12:17  [ТС] #3
спс, но все равно как я понял тут без time не обойтись
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.07.2014, 12:30 #4
Цитата Сообщение от Fobos315 Посмотреть сообщение
но все равно как я понял тут без time не обойтись
srand() инициализирует генератор псевдо-случайных чисел переданным числом.
Если нужно получать разные последовательности м/у запусками, то первое что приходит на ум, это, конечно же, время. Но можно использовать и любое другое значение, которое может меняться от запуска к запуску. Например:
- попросить пользователя ввести число;
- время пинга до какого-нибудь сервера;
- размер свободной памяти в системе;
... и т.д.
1
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 767
Записей в блоге: 1
24.07.2014, 12:40 #5
Именно. Стандартный способ - вызов
C++
1
srand(time(NULL));
Не забывайте - числа псевдослучайные, так что rand() всегда будет возвращать одно и то же. Единственный способ - как-то менять затравку, на что и нужен вызов time.

Всегда ваш К.О.
0
Vourhey
Почетный модератор
6487 / 2261 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
24.07.2014, 12:41 #6
Цитата Сообщение от Fobos315 Посмотреть сообщение
но все равно как я понял тут без time не обойтись
И? Не обходись без time, в чем проблема?
0
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 14:07  [ТС] #7
Тогда с чем связано то что у меня получилось точь в точь как и написано. Вероятность совпадения из 8 случаев что будет тоже самое очень маленькая. Почему они посчитали что вероятность что будет 1 = 0.25. Может речь идет о каких либо приоритетах? Причем вывод был сделан после запуска программы а ведь могло из 8 раз примерно раз 5 показать единицу, это не значит что шанс что будет единица выше чем 2 и 3. ? см. вложение
0
Миниатюры
Как сделать чтобы каждый раз рандомное число менялось?  
frostyfull
33 / 33 / 8
Регистрация: 13.06.2014
Сообщений: 509
24.07.2014, 14:15 #8
Fobos315, простите, что?
Как не сложно догадаться вероятность была посчитана исходя из одного запуска программы и не по теории вероятности, а по факту
Т.к. из 8 раз единица выпала 2 раза, то вероятность 25% или же просто 0.25
Но суть вопроса я все равно не понял
0
Fobos315
2 / 2 / 0
Регистрация: 25.04.2014
Сообщений: 68
24.07.2014, 17:42  [ТС] #9
frostyfull суть в том как могло получиться что пример приведенный в статье про рамндомное число полностью совпал с моим (т.е ответы одни и те же из 8 предложенных)
0
frostyfull
33 / 33 / 8
Регистрация: 13.06.2014
Сообщений: 509
24.07.2014, 17:56 #10
Fobos315, при написании такой же программы, если рандом работает правильно, у тебя шанс около 33% получить такой же ответ, а вот если при каждом запуске программы точно также получается, то это уже косяк
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.07.2014, 18:00 #11
Цитата Сообщение от frostyfull Посмотреть сообщение
то это уже косяк
Почему косяк? если srand() не вызывается в разным значением при каждом запуске, то логично получать каждый раз ту же самую последовательность.
Если стандартную библиотеку конечно не поменять на другую между запусками
0
S_el
2118 / 1643 / 309
Регистрация: 15.12.2013
Сообщений: 6,442
24.07.2014, 18:01 #12
Fobos315, вам-же уже ответили:
Как сделать чтобы каждый раз рандомное число менялось?
0
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...
Понятно что при повторном запуске я буду получать тоже самое.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.07.2014, 18:39 #14
Fobos315, разные компиляторы с разными библиотеками могут давать разные результаты. И наоборот: одинаковые либы - одинаковые результаты.
1
frostyfull
33 / 33 / 8
Регистрация: 13.06.2014
Сообщений: 509
25.07.2014, 10:38 #15
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему косяк? если srand() не вызывается в разным значением при каждом запуске, то логично получать каждый раз ту же самую последовательность.
Если стандартную библиотеку конечно не поменять на другую между запусками
Я просто не знаю как у тебя, но когда я писал не так давно программу с рандомом, у меня все работало прекрасно, и при каждом запуске все значения были разными
Если сильно надо могу прошерстить свои исходники и кинуть код как я делал рандом
0
25.07.2014, 10:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2014, 10:38
Привет! Вот еще темы с ответами:

Как сделать так, чтобы программа открывалась там, где я её закрыл в прошлый раз? - C++
Как переделать эту функцию: main_hWnd = CreateWindowEx( WS_EX_TOPMOST, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW &amp;...

Как найти, сколько раз надо взять первое и второе число, чтобы получить третье - C++
Как найти сколько раз надо взять первое и второе число что-бы получить третье (Все варианты найти) Числа могут быть большими так-что...

Как сделать так, чтобы число не повторялось? - C++
Вопрос следующий. В определенном диапазоне (например от 0 до 9) лежат числа, нужно сделать так, чтобы весь диапазон был выведен на экран,...

Как сделать, чтобы в char было hex число - C++
ввод числа int s; cin &gt;&gt;s; char z=? как сделать чтобы в char z было hex число, то есть если s=15 z=0xF


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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