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

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

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

корректно не работает функция rand - C++

19.12.2015, 21:35. Просмотров 763. Ответов 21
Метки нет (Все метки)

в полном коде почему-то не работает корректно функция rand, вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<cstdlib>
#include<ctime>
#include<iostream>
 
 
using namespace std;
int main(){
    srand(time(NULL));
    int v;
    v=rand()%5+3;
    cout<<"RAND: "<<v<<"\n";
 
    system("pause");
    return 0;
}
по теории должно выдать переменную v в диапазоне от 3-ёх до 5-ти, однако оно иногда и 7 выдаёт, и 6 выдаёт, в общем ненормально работает. Кто ткнёт носом в чём проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2015, 21:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос корректно не работает функция rand (C++):

Не работает библиотечная функция rand() в C++ на Ubuntu 16.04 - C++
Добрый вечер. Учусь программированию на С++ по книге &quot;С++ Базовый курс. Третье издание&quot; от Герберта Шилдта Компилирую программы с...

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

Функция rand() - C++
Здравствуйте, где я могу посмотреть код функции rand()? И подобных функций на генерирование псевдослучайных чисел?

Функция rand - C++
Решить задачу с использованием библиотечной функции rand,заголовочный файл stdlib.h Случайные числа в диапазоне от -32768 до 32768 можно...

Функция rand(); - C++
Нужно чтобы функция rand(); выдавала значения в заданном интервале то есть к примеру от 230 до 233 нужно чтобы выдавало числа 230 ...

Функция - rand - C++
Здравствуйте. Проблема - нужно сгенерировать случайное число из области чисел введённых в переменную. Допустим, я создаю переменную: ...

21
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 21:37 #2
Цитата Сообщение от Okrekso Посмотреть сообщение
C++
1
%5+3
В этом, ты генерируешь цифру от 0 до 5 а потом прибавляешь 3
Для твоих целей
как то так
C++
1
v=rand()%2+3;
хотя есть более новый и правильный механизм для генерации
0
Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 21:41  [ТС] #3
Цитата Сообщение от Mesteriis Посмотреть сообщение
хотя есть более новый и правильный механизм для генерации
какой?

Добавлено через 1 минуту
Цитата Сообщение от Mesteriis Посмотреть сообщение
v=rand()%2+3;
И да, не мог-бы пояснить за каким принципом это работает, проблема решена, но всё-таки, почему оно генерирует таким образом именно в диапазоне от 3-х до 5-ти...
0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 21:45 #4
Okrekso,
C++
1
2
3
4
std::default_random_engine g(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> distribution(3, 5);
auto roll=distribution(g);
cout << roll << endl;
Добавлено через 3 минуты
Цитата Сообщение от Okrekso Посмотреть сообщение
от 3-х до 5-ти...
сколько всего может быть значений диапазоне от 3х до 5и?
Ответ 3 { 0 , 1 , 2 } соответсвенно тебе + N надо задать нижний порог, то есть в твоем примере 3. Дальше запускается генератор например rand=0. 0+3=3 или rand = 2. соответственно 2+3=5
0
Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 21:47  [ТС] #5
Цитата Сообщение от Mesteriis Посмотреть сообщение
1
2
3
std::default_random_engine g(std::chrono::system_clock::now().time_since_epoch().count());
* * * * * * std::uniform_int_distribution<int> distribution(3, 5);
* * * * * * auto roll=distribution(g);
Стыдно спрашивать. Но не мог-бы ты пояснить) А-то я совсем глупый по сути.
0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 21:50 #6
Цитата Сообщение от Okrekso Посмотреть сообщение
Но не мог-бы ты пояснить)
Лучше сначала почитай тут, а потом задай непонятные вопросы тут

Добавлено через 1 минуту
Англисский вариант более правельный тут
0
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
19.12.2015, 21:50 #7
Там кривой перевод.
0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 21:51 #8
nmcf, Ну я же скинул английский следом)
0
Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 21:52  [ТС] #9
ну допустим. Нужно добавить нижний порог, да? делаем v=rand()%2+4 (диапазон от 2 до 4). Однако это не работает. В чём проблема?
0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 21:57 #10
Okrekso, еще раз!
C++
1
v=rand()%2+4;
rand()%2=1
1+4=5!!!!
а для от 2 до 4
C++
1
v=rand()%2+2;
Добавлено через 1 минуту
А v=rand()%2+4 будет от 4 до 6
0
Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 22:18  [ТС] #11
ох. мн кажется я совсем тугой.
распишем
v=rand()% 2 - второе число это наименьшее значение которое может принят переменная ( если это верно )
2 - это что?

Добавлено через 4 минуты
Ой, кажется я понял.
второе число это наменьшее значение, которое в сумме со вторым числом должно давать максимальное значение?
0
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,114
Завершенные тесты: 1
19.12.2015, 22:24 #12
Okrekso, Смотри, ну прям на пальца, не знаю как объяснить еще проще
метод rand(); генерирует случайное чисто в диапазоне от 0 до RAND_MAX
, например на надо сгенерировать число от 0 до 10, я могу написать
C++
1
2
RAND_MAX=10;
x=rand();
или так
C++
1
x=rand()%10;
это два одинаковые записи.
Что бы генерировать не от нуля, мне надо к х прибавить какое то значение например, от 3 до 10
первый вариант
C++
1
2
RAND_MAX=7 // поточу что если результат генерации будет 10 или 9 или 8 при прибавлении 3х я выйду за верхний предел
x=rand()+3;
или более упрощенно
C++
1
ч=rand()%7+3
Добавлено через 1 минуту
Цитата Сообщение от Okrekso Посмотреть сообщение
второе число это наменьшее значение, которое в сумме со вторым числом должно давать максимальное значение?
Ну нет, 2 (второе число) это наименьшее значения в пределах генерации, потому что rand генерирует исключительно от 0 до RAND_MAX
0
Kerry_Jr
Модератор
Эксперт PHP
2207 / 2003 / 701
Регистрация: 14.05.2014
Сообщений: 5,870
Записей в блоге: 1
Завершенные тесты: 5
19.12.2015, 22:33 #13
Okrekso, есть прекрасная формула rand() % (max - min + 1) + min, где min - нижняя граница диапазона; max - верхняя граница диапазона.
0
Mesteriis
19.12.2015, 22:35
  #14

Не по теме:

Kerry_Jr, Ой я вот сейчас боюсь ты сейчас его еще больше запутал)))

0
Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 22:39  [ТС] #15
всё, я кажется наконец-то сформулировал правило написания rand.
rand()% ( первое число в сумме со вторым числом должно давать максимальное значение, в то время как второе являет собой минимальное значение ) 6+2 //число в диапазоне от 2-х до 8-ми.
0
19.12.2015, 22:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2015, 22:39
Привет! Вот еще темы с ответами:

Функция rand - C++
Помогите написать программу) В цикле, используя функцию rand генерировать числа в диапазоне от 0 до 9. Из этих чисел составить цеиое...

Функция rand() - C++
Сделал задания: Комп должен угадать число какое я задал в уме. В диапазоне от 1 до 100 . void Ex() { srand(time(NULL)); int first =...

Функция rand() - C++
Помогите, как сделать так что бы функция random при каждом запросе к ней генерировала случайное число ( сейчас все 3 числа одинаковые) ...

функция rand() - C++
У меня такой вопрос, как можно сделать искать рандомные числа за исключением определенных! Допустим нахожу рандомное число от 0 до 10,...


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

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

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