C рандом в диапазоне

Приветствую всех, кто заскочил. В это короткой заметке будет пара слов о генерации псевдослучайных чисел на C/C++. В частности о том, как работать с самой простой функцией генерации — rand().

Функция rand()

Находится в стандартной библиотеке С++(stdlib.h). Генерирует и возвращает псевдослучайное число в диапазоне от 0 до RAND_MAX . Эта константа может отличаться в зависимости от компилятора или архитектуры процессора, в основном, это максимальное значение типа данных unsigned int . Параметров не принимает и никогда не принимала.

Для того, чтобы генерация свершилась, нужно выставить семя(seed) с помощью вспомогательной функции из той же библиотеки — srand() . Она принимает число и ставит его в качестве отправной точки в генерации случайного числа. Если семя не выставить, то при каждом запуске программы, мы будет получать одинаковые случайные числа. Самым очевидным решением является отправить туда текущее системное время. Сделать это можно с помощью функции time(NULL). Эта функция находится в библиотеке time.h .

С теорией разобрались, нашли все функции для генерации случайных чисел, теперь давайте погенерируем.

Пример использования функции генерации случайных чисел rand()

Ранд нагенерировал нам 10 случайных чисел. В том, что они случайные вы можете убедиться, запуская программу вновь и вновь. Но этого недостаточно, поэтому нужно поговорить о диапазоне.

Выставить границы диапазона для rand()

Чтобы сгенерировать число в диапазоне от A до B включительно, нужно написать так:

Значения границ могут быть в том числе и отрицательными, что позволяет генерировать отрицательное случайное число, посмотрим пример.

Читайте также:  Fg battery current consumption

Я изучаю массивы и не могу понять, что я делаю неправильно.

Мне нужно вывести массив с 8 случайных чисел от 5 до 25.

Перед тем как проголосовать за мой вопрос: /, я уже пытался найти похожие вопросы по стеку, но большинство из них содержат использование алгоритмов или различные виды методов сортировки. Я не могу использовать эту технику в моем ответе. Это должно быть легче решить.

Где проблема в моем коде, и почему мое случайное число не генерирует новое число, пока я зацикливаюсь по массиву?

Когда я компилирую и запускаю его, он дает мне 8 раз одинаковое число, однако я позволяю своему массиву проходить через каждый отдельный индекс, добавляя в него случайное число? На бумаге это должно работать нормально, верно?

Есть ли кто-нибудь, кто может объяснить, что я сделал неправильно, и почему мой цикл не работает правильно?

Решение

В с ++ 11, с random Услуги, которые вы можете сделать

Другие решения

Генерация случайных чисел в диапазоне в C ++ не так тривиальна, как я знаю. В моем примере вам нужно иметь функции srand () и rand ().

Когда я компилирую и запускаю его, он дает мне 8 раз одинаковое число, однако я позволяю своему массиву проходить через каждый отдельный индекс, добавляя в него случайное число? На бумаге это должно работать нормально, верно?

Переменные похожи на ящики для хранения. Вы можете ввести значения, а затем позже вы можете получить возвращенное значение.

Эта строка вычисляет значение, выполняя выражение rand() % 25 + 5 и помещает это значение в переменную random_number , Например, может быть, он вычисляет значение 20 помещает это значение в переменную. Всякий раз, когда вы извлекаете значение из переменной, вы получите последнее введенное число.

Читайте также:  Videopad video editor portable

Эта строка принимает переменную random_number и извлекает его значение (скажем, 20 ) и назначает его table[i] , Важным моментом является то, что здесь не имеет значения, как random_number получил свое значение. Вы кладете значение в поле, и вы только получите это значение обратно.

Если вы хотите, чтобы значение переменной изменилось, вы должны изменить его:

Если вам нужен объект, который выполняет код при оценке, тогда вам нужна функция:

После определения этой функции вы можете использовать random_number() переоценить выражение:

Обратите внимание на разницу здесь: random_number() это вызов функции, который повторяет rand() % 25 + 5 выражение, а не переменная. Переменные — это просто хранилище для любых данных, которые вы в последний раз вводили. Функции запускают код при их вызове.

Предположим, вы хотите сгенерировать случайные числа в диапазоне [начало, конец]:

дает случайное целое число в [0, конец).

Итак, сначала вы генерируете случайное число в [0, (end-start)], а затем добавляете «start» в этот диапазон, чтобы получить желаемый диапазон, как показано ниже.

[0 + начало, конец-начало + начало] = [начало, конец]

Подскажите алгоритм, который выводит случайные числа в диапазоне [a,b]

4 ответа 4

Так как функция rand устарела начиная с С++11 (у нее плохие характеристики), то сейчас лучше использовать классы из :

Так же в библиотеке boost присутствует свой random

Всё ещё ищете ответ? Посмотрите другие вопросы с метками алгоритм c++ или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.10.35756

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *