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

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

Восстановить пароль Регистрация
 
 
Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
19.12.2015, 21:35     корректно не работает функция rand #1
в полном коде почему-то не работает корректно функция 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 выдаёт, в общем ненормально работает. Кто ткнёт носом в чём проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2015, 21:35     корректно не работает функция rand
Посмотрите здесь:

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

Добавлено через 1 минуту
Цитата Сообщение от Mesteriis Посмотреть сообщение
v=rand()%2+3;
И да, не мог-бы пояснить за каким принципом это работает, проблема решена, но всё-таки, почему оно генерирует таким образом именно в диапазоне от 3-х до 5-ти...
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 21:45     корректно не работает функция rand #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
Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
19.12.2015, 21:47  [ТС]     корректно не работает функция rand #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);
Стыдно спрашивать. Но не мог-бы ты пояснить) А-то я совсем глупый по сути.
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 21:50     корректно не работает функция rand #6
Цитата Сообщение от Okrekso Посмотреть сообщение
Но не мог-бы ты пояснить)
Лучше сначала почитай тут, а потом задай непонятные вопросы тут

Добавлено через 1 минуту
Англисский вариант более правельный тут
nmcf
4283 / 3714 / 1248
Регистрация: 14.04.2014
Сообщений: 14,522
19.12.2015, 21:50     корректно не работает функция rand #7
Там кривой перевод.
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 21:51     корректно не работает функция rand #8
nmcf, Ну я же скинул английский следом)
Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
19.12.2015, 21:52  [ТС]     корректно не работает функция rand #9
ну допустим. Нужно добавить нижний порог, да? делаем v=rand()%2+4 (диапазон от 2 до 4). Однако это не работает. В чём проблема?
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 21:57     корректно не работает функция rand #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
Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
19.12.2015, 22:18  [ТС]     корректно не работает функция rand #11
ох. мн кажется я совсем тугой.
распишем
v=rand()% 2 - второе число это наименьшее значение которое может принят переменная ( если это верно )
2 - это что?

Добавлено через 4 минуты
Ой, кажется я понял.
второе число это наменьшее значение, которое в сумме со вторым числом должно давать максимальное значение?
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 22:24     корректно не работает функция rand #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
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1856 / 1652 / 576
Регистрация: 14.05.2014
Сообщений: 4,744
Записей в блоге: 1
Завершенные тесты: 5
19.12.2015, 22:33     корректно не работает функция rand #13
Okrekso, есть прекрасная формула rand() % (max - min + 1) + min, где min - нижняя граница диапазона; max - верхняя граница диапазона.
Mesteriis
19.12.2015, 22:35
  #14

Не по теме:

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

Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
19.12.2015, 22:39  [ТС]     корректно не работает функция rand #15
всё, я кажется наконец-то сформулировал правило написания rand.
rand()% ( первое число в сумме со вторым числом должно давать максимальное значение, в то время как второе являет собой минимальное значение ) 6+2 //число в диапазоне от 2-х до 8-ми.
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
19.12.2015, 22:40     корректно не работает функция rand #16
Okrekso, Ну да! ))) Поздравляю)
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1856 / 1652 / 576
Регистрация: 14.05.2014
Сообщений: 4,744
Записей в блоге: 1
Завершенные тесты: 5
19.12.2015, 22:41     корректно не работает функция rand #17
Цитата Сообщение от Mesteriis Посмотреть сообщение
генерирует случайное чисто в диапазоне от 0 до RAND_MAX
от 0 до RAND_MAX - 1

Добавлено через 55 секунд
Цитата Сообщение от Okrekso Посмотреть сообщение
от 2-х до 8-ми.
8 в диапазон не попадет.
LaRew
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 17
19.12.2015, 23:06     корректно не работает функция rand #18
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
от 0 до RAND_MAX - 1

Добавлено через 55 секунд
8 в диапазон не попадет.
Почему? Если загнать в программу, то будет перебор с включение RAND_MAX. И ли я не прав?
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1856 / 1652 / 576
Регистрация: 14.05.2014
Сообщений: 4,744
Записей в блоге: 1
Завершенные тесты: 5
20.12.2015, 07:56     корректно не работает функция rand #19
LaRew, выражение типа число1 % число2 никогда не вернет результатом число2

Добавлено через 2 минуты
Цитата Сообщение от LaRew Посмотреть сообщение
то будет перебор с включение RAND_MAX.
Да, тут я поторопился.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2015, 22:58     корректно не работает функция rand
Еще ссылки по теме:

C++ функция rand()
Функция rand() C++
C++ Функция rand

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

Или воспользуйтесь поиском по форуму:
Okrekso
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 9
20.12.2015, 22:58  [ТС]     корректно не работает функция rand #20
ребят, новая проблема...
вот часть кода:
C++
1
2
3
                int kolVap[5];
        kolVar[0]=rand()%3+3; //рандом количества вариантов
        cout<<"\nkolvar:"<<kolVar<<"\n";
на выводе получаем это: 003AFD004 (или что-то подобное)
с чем это может быть связано?
Yandex
Объявления
20.12.2015, 22:58     корректно не работает функция rand
Ответ Создать тему
Опции темы

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