Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10

Некорректно работает функция rand

19.12.2015, 21:35. Показов 5085. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2015, 21:35
Ответы с готовыми решениями:

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

Функция работает некорректно
#include &lt;iostream&gt; using namespace std; short fill(double*, short); const short size = 5; int main() { double array;...

Некорректно работает функция
Функция Small_S должна находить короткое слово в строке str, а она почему-то выводит первое слово! Помогите решить проблему, буду очень...

21
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
19.12.2015, 21:37
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от Mesteriis Посмотреть сообщение
хотя есть более новый и правильный механизм для генерации
какой?

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

Добавлено через 1 минуту
Англисский вариант более правельный тут
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2015, 21:50
Там кривой перевод.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
19.12.2015, 21:51
nmcf, Ну я же скинул английский следом)
0
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 21:52  [ТС]
ну допустим. Нужно добавить нижний порог, да? делаем v=rand()%2+4 (диапазон от 2 до 4). Однако это не работает. В чём проблема?
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
19.12.2015, 21:57
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  [ТС]
ох. мн кажется я совсем тугой.
распишем
v=rand()% 2 - второе число это наименьшее значение которое может принят переменная ( если это верно )
2 - это что?

Добавлено через 4 минуты
Ой, кажется я понял.
второе число это наменьшее значение, которое в сумме со вторым числом должно давать максимальное значение?
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
19.12.2015, 22:24
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
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.12.2015, 22:33
Okrekso, есть прекрасная формула rand() % (max - min + 1) + min, где min - нижняя граница диапазона; max - верхняя граница диапазона.
0
19.12.2015, 22:35

Не по теме:

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

0
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
19.12.2015, 22:39  [ТС]
всё, я кажется наконец-то сформулировал правило написания rand.
rand()% ( первое число в сумме со вторым числом должно давать максимальное значение, в то время как второе являет собой минимальное значение ) 6+2 //число в диапазоне от 2-х до 8-ми.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
19.12.2015, 22:40
Okrekso, Ну да! ))) Поздравляю)
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
19.12.2015, 22:41
Цитата Сообщение от Mesteriis Посмотреть сообщение
генерирует случайное чисто в диапазоне от 0 до RAND_MAX
от 0 до RAND_MAX - 1

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

Добавлено через 55 секунд
8 в диапазон не попадет.
Почему? Если загнать в программу, то будет перебор с включение RAND_MAX. И ли я не прав?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
20.12.2015, 07:56
LaRew, выражение типа число1 % число2 никогда не вернет результатом число2

Добавлено через 2 минуты
Цитата Сообщение от LaRew Посмотреть сообщение
то будет перебор с включение RAND_MAX.
Да, тут я поторопился.
0
 Аватар для Okrekso
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 10
20.12.2015, 22:58  [ТС]
ребят, новая проблема...
вот часть кода:
C++
1
2
3
                int kolVap[5];
        kolVar[0]=rand()%3+3; //рандом количества вариантов
        cout<<"\nkolvar:"<<kolVar<<"\n";
на выводе получаем это: 003AFD004 (или что-то подобное)
с чем это может быть связано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2015, 22:58
Помогаю со студенческими работами здесь

Функция работает некорректно
написал функцию,возвращающий нажатую клавишу: char func2(){ if(_kbhit()){ char c; c=_getch(); return c; } return 0; ...

Некорректно работает функция Delete
Слепил прожку. Которая должна записать в файл информацию о стране. А потом функция Делит должна по названию страны удалить всю информацию о...

Некорректно работает функция проверки на численность
Фрагмент кода: //... bool is_number() { //* while(cin.fail()) { cin.clear(); cin.sync(); return false;} return true;...

Некорректно работает функция добавления, указать ошибку
Здравствуйте, в моей программе некорректно работает добавление элемента, функция addBook. Также прошу проверить правильность работы...

Некорректно работает функция рандомайз при заполнении массива
Задача - внести случайные числа в динамический массив. Проблема - почему-то при первом запуске программы в первый элемент массива...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru