сообщество, а я тут со своими глупыми вопросами новичков.
Сейчас разбираюсь с рандомом и тут случился вопрос.
Я понимаю как написать рандом от 1 до 10
''' 1 + rang() % 10 '''
Но я хочу сделать рандом от 3 до 9
Куда писать какое значение ?
Ибо
''' 3 + rang() % 9 ''' будет выдавать от 3 до 11
@Misketik, попробуй уменьшить девятку так, чтобы в сумме выдавало не 11, а 9
Не так много вариантов. Какие ты уже перепробовал?
А ещё лучше ознакомиться с инструментами C++ для генерации случайных чисел
для новичка и rang хватит
хз мне было гораздо сложнее пользоваться этим(да ладно и сейчас неудобнее пользоваться), чем rand
Зато, вместо магии со сложением и взятиями остатка мы получаем однозначно задающий границы код: std::uniform_int_distribution<> distrib(1, 6); И читаем его декларативно в рамках понятных мозгу представлений, а не разворачиваем императивный код в эти же представления
и дополнительно написать 2 непонятных строки
Ну, таков уж порог входа в нормальный, современный C++, вопрос того, нужно ли это — оставлю на потом
Параметрическое задание открытого интервала [a, b] - это функция f(t) = a + (b - a)*t, где t in [0, 1], f(0) = a f(1) = b Сможешь теперь составить функцию для интервала [3, 9]?
distri...(сложное слово) и прочие штуки это вообще уже неплохо бы математику знать для таких понятий, так что рандом в С++ это явно не для новичков делалось. Для научных работ разве что
3 + rand()%6
а бот отправляет потом эти сообщения конечному получателю или ты ответил в пустоту?
хз, я вообще по диагонали прочитал. Это бот?)
SupaproBot? не знаю
7 🤔 Теперь вообще перестал понимать.
повторю вопрос, если % остаток от деления, то каким может быть значение x = rand()%N
@Misketik а вот ответ, на который даже не среагировали.
Видимо я в оконцове запутался и начинаю не понимать. То диапазон рандома что мне нужен был - это от 3 до 9 Получилось вот что: ''' 3 + rand() % 7 '''
Я новичёк. Я его прочел трижды. И я пока не понял его.
Задам вопрос. Какое минимальное и максимальное число возможно для rand() % 7? А если к минимальному и максимальному прибавить 3, как изменятся числа?
ну тыже близок к разгадке. каким может быть ОСТАТОК от деления на некое число?
@Misketik, а для rang() % 9? А что будет, если снова прибавить 3 к обоим числам?
программирование хорошо тем, что можно очень легко проверить. Запустить цикл да посмотреть что выведет твоё выражение
На данном этапе полезнее самому выполнить работу цикла на бумаге
Нет. Всё. В край затупил.
https://ru.wikipedia.org/wiki/Деление_с_остатком
подсказка, остаток от деления на N не может быть больше или равен N
Я понимаю про деление с остатком. Эдакий 10 % 3 = 1
ну тогда в чем вопрос?
ну а если это N% M?
Вы правильно там выше ответили, насколько я видел. Нижнюю границу диапазона Вы задаете константой буквально. Теперь: rand() возвращает некоторое неотрицательное целое (т.е. в т.ч. нуль). Нам нужно "ужать" его до диапазона от нуля до некоторого X. Этого мы достигаем получением остатка от целочисленного деления этого возвращаемого значения на X, который как раз окажется в диапазоне [0, X). Иллюстрирую: 0 % 3 = 0, 1 % 3 = 1, 2 % 3 = 2, 3 % 3 = 0, 4 % 3 = 1... Как Вы можете видеть, эта последовательность из повторяющихся значений, сгруппированных по X (в нашем случае - тройками), что нам и нужно. Теперь остается лишь прибавить это "ужатое" значение к нижней границе, чтобы получить результат в интервале [lowerBound, upperBound). Рекомендация: старайтесь находить экстремумы для подфункций алгоритма, чтобы прикинуть его corner-case'ы. Так его понимание может стать проще.
t в данном примере rand()/RAND_MAX, a - начало интервала, в твоем случае 3, b - конец интервала (9), получаем: 3 + (9 - 3)*(rand()/RAND_MAX) = 3 + 6*(rand()/RAND_MAX)
вот без шуток объяснения неочень лёгкие выходят
его упростили. я задал вопрос про x = M%N когда будет ответ мы продолжим. а пока он не готов.
Вообще в хлам мозг превратился. Я не говорю, что вы плохой или все те кто тут пытается мне помочь. Я благодарен что тратите время на меня. Но по мне это выглядит мозгодробильно для новичка.
Проблема не в непонимании с++, а в непонимании математики
Да. Не готов. Потому как не понимаю при чем тут буквы. Цифры же нужны. 😞 Как может равна быть чему то х если цифр нет.
Это всего лишь элементарные выкладки.
Звучит как фраза ребёнка, который перешёл в 5 класс и увидел уравнения))
естественно если даны буквы, то ответ в цифрах не дать... Но можно дать ответ в общем виде...
ты типа шутиш? какие буквы цифры. это уравнение. я прошу его мне решить. тыж понимаешь что если x = 1 +1 , то x == 2? да понимаешь вот я прошу тебя решить это в символах зная что x = M%N. я говорю что M и N целые числа. дай мне диапазон значений x в виде не равенства. это 8ой класс школы. Вики что есть остаток отделения тебе дали. Тут ++ нет. простая арифметика. о чем тут вообще говорить. символы-цифры... уже троллинг какой то. если ты работал на питоне щас в ++ пришел. уже язык не поворачивается тебя назвать новичком. тут нет ++ от слов совсем. тоже самое на питоне напиши. вопрос такой же. каким будет диапазон x.
Нет не шучу. Я все это время не понимал что ты хотел что бы я на примере твоей формулы подставил свои значения.
откуда инфа про питон программиста
Начинал изучать питон, джаву.
https://t.me/supapro/915094
это универсальная схема для получения псевдослучайного числа в диапазоне от a до b, включая границы. тебе достаточно подставить свои a и b.
Сначала находим фракцию от 0 до 1. Потом по этой фракции делаем выборку в переделах разницы между b и a. Затем сдвигаем число на основу(а)
ну это другой способ скажем так...
Фракция находится по (float)rand() / RAND_MAX
Обсуждают сегодня