Как сделать рандомный массив в с
Добавил пользователь Владимир З. Обновлено: 07.10.2024
В этих строках кода мы объявляем массив вещественного типа real , а так же две переменные - первая для цикла, а вторая для того, чтобы пользователь сам задал количество элементов массива. Мы лишь ограничим их максимальное количество цифрой 100.
2. Ввод количества элементов массива
Здесь мы предлагаем пользователю самому выбрать, сколько в массиве будет чисел.
3. Создаем массив и заполняем его числами
В этой части мы создаем цикл, и ставим количество его витков до того числа, которое выбрал пользователь НО - 1, так как не стоит забывать , что нумерация массивов начинается с 0!
С помощью оператора random мы выбираем диапазон чисел, в данном случае это 100 чисел, начиная с -50. Тоесть диапазон выглядит так: [-50. 50]. Программу можно улучшить путем предложения пользователю самому выбрать размеры диапазона.
Оператор round округляет каждый новый элемент массива до двух знаков после запятой.
В этой статье вы увидите самые разнообразные велосипеды алгоритмы для генерации случайных чисел.
Про что статья
Про алгоритмы генерирующие псевдослучайные числа, которые отличаются между собой качеством результата и скоростью исполнения. Статья будет полезна тем, кто хочет получить высокопроизводительную генерацию чисел в своих программах или разработчикам софта для микроконтроллеров и старых платформ по типу ZX Spectrum или MSX.
C++ rand
Первое что узнаёт начинающий программист С++ по теме получения рандома — функция rand, которая генерирует случайное число в пределах от 0 и RAND_MAX. Константа RAND_MAX описана в файле stdlib.h и равна 32'767, но этом может быть не так, например в Linux (см. коммент). Если же rand() в вашем компиляторе генерирует числа в пределах 32'767 (0x7FFF) и вы хотите получить случайное число большого размера, то код ниже можно рассматривать как вариант решения этой проблемы:
Реализация функции rand в старом C была проста и имела следующий вид:
Данная реализация имела не очень хорошее распределение чисел и ныне в C++ улучшена. Так же стандартная библиотека C++ предлагает дополнительные способы получения случайного числа, о которых ниже.
С++11 STL random
Данный сорт рандома появился в C++11 и представляет из себя следующий набор классов: minstd_rand, mt19937, ranlux, knuth_b и разные их вариации.
Некоторые из алгоритмов в STL random могут работать быстрее чем rand(), но давать менее качественную последовательность случайных чисел.
PRNG — Pseudo-random Numbers Generator
Можете считать это название — синонимом линейного конгруэнтного метода. PRNG алгоритмы похожи на реализацию rand в C и отличаются лишь константами.
PRNG алгоритмы быстро работают и легки в реализации на многих языках, но не обладают большим периодом.
XorShift
Данный генератор очень хорош тем, что в нём вообще нет операций деления и умножения — это может быть полезно на процессорах и микроконтроллерах в которых нету ассемблерных инструкций деления/умножения (PIC16, Z80, 6502).
Z26 это эмулятор старенькой приставки Atari2600, в коде которого можно обнаружить рандом ориентированный на работу с 1-байтовыми регистрами.
Однажды мне пришлось сделать реализацию этого алгоритма для z80:
Компактный рандом для Z80 от Joe Wingbermuehle
Если вам интересно написание программ под машины с зилогом, то представляю вашему вниманию алгоритм от Joe Wingbermuehle (работает только на зилоге):
Генератор рандома в DOOM
Приведу более компактный код наглядно показывающий работу этой функции.
RDRAND
Некоторые современные процессоры способны генерировать случайные числа с помощью одной ассемблерной команды — RDRAND. Для использования этой функции в C++ вы можете вручную прописать нужные инструкции ассемблерными вставками или же в GCC подключить файл immintrin.h и выбрать любую из вариаций функции _rdrandXX_step, где XX означает число бит в регистре и может быть равно 16, 32 или 64.
Если вы увидите ошибку компиляции, то это значит, что вы не включили флаг -mrdrnd или ваш компилятор/процессор не поддерживает эту инструцию. Возможно это самый быстрый генератор случайных чисел, но есть вопросы в его криптографической стойкости, так что думайте.
Концовка
Класс std::minstd_rand из библиотеки STL random работает быстрее обыкновенного rand() и может стать его альтернативной заменой, если вас не особо волнует длинна периода в minstd. Возможны различия в работе этих функций в Windows и Unix'ах.
но массив, который я получаю, очень мало рандомизирован. Он генерирует множество блоков последовательных чисел.
вот решение, которое перетасовывает список уникальный числа (без повторов, никогда).
Если вы хотите разрешить повторные значения (что не то, что хотел OP), то посмотрите в другом месте. :)
Math.random() вернет число от 0 до 1(эксклюзив). Итак, если вы хотите 0-40, вы можете умножить его на 40, самый высокий результат может быть тем, на что вы умножаете.
.. массив, который я получаю, очень мало рандомизирован. Он генерирует множество блоков последовательных чисел.
последовательностей случайных элементов, часто содержат блоки последовательных чисел, см. заблуждение игрока. Например:
еще более короткий подход ES6:
кроме того, у вас может быть функция с аргументами:
поскольку диапазон чисел ограничен, я бы сказал, что лучше всего создать массив, заполнить его числами от нуля до 39 (по порядку), а затем перетасовать его.
Это традиционный способ сделать это, но я второй @Pointy и @Phrogz, если вы хотите избежать дубликатов в своем массиве без необходимости делать дорогостоящие вычисления
Quirk однострочные решения на каждый день.
значения в массивах являются полностью случайными, поэтому, когда вы будете использовать эти фрагменты, они будут отличаться.
массив (длина 10) со случайными символами в нижнем регистре
массив (длина 10) со случайными целыми числами от 0 до 99
массив случайных дат (от 10 лет назад до сих пор)
массив (длина 10) случайных строк
['cubjjhaph', 'bmwy', 'alhobd', 'ceud', 'tnyullyn', 'vpkdflarhnf', 'hvg', 'arazuln', 'jzz', 'cyx' ]
используя некоторые новые функции ES6, теперь это может быть достигнуто с помощью:
обратите внимание, что это решение будет работать только в современных браузерах, поддерживающих эти функции ES6: функции со стрелками и массив.от.)(
со страницы, предложенной @Phrogz
Мне нужно было что-то немного отличное от того, что дали эти решения, в том, что мне нужно было создать массив с числом различных случайных чисел, удерживаемых в заданном диапазоне. Ниже приведено мое решение.
Я бы предпочел не создавать цикл, который имеет возможность заканчиваться множеством ненужных вызовов (если ваш счет и диапазон высоки и близки к тому же номеру), но это лучшее, что я мог придумать.
Я думаю, что этот метод решит проблему с вероятностями, ограниченными только генератором случайных чисел.
let randomNumber = Array.from(, () => Math.floor(Math.random() * 39));
ограничил массив 6 значениями, чтобы его было легко увидеть.
Если вам это нужно со случайными уникальными значениями от 0. диапазон длин:
Чтобы создать массив numpy определенной формы со случайными значениями в Python, используйте rand() с формой массива, переданной в качестве аргумента.
В этом руководстве мы узнаем, как создать массив numpy со случайными значениями, используя примеры.
Синтаксис
Синтаксис функции rand():
Где, d0, d1, d2, .. – размеры в каждом измерении массива.
Например, numpy.random.rand (2,4) означает двумерный массив формы 2x4. И numpy.random.rand (51,4,8,3) означает 4-мерный массив формы 51x4x8x3.
Функция возвращает массив numpy с указанной формой, заполненный случайными значениями с плавающей запятой от 0 до 1.
Пример 1: создание одномерного массива
Чтобы создать одномерный массив numpy со случайными значениями, передайте длину массива функции rand().
В этом примере мы создадим одномерный массив numpy длиной 7 со случайными значениями для элементов.
Пример 2
Чтобы создать двумерный массив numpy со случайными значениями, передайте требуемую длину массива по двум измерениям в функцию rand().
В этом примере мы создадим двумерный массив numpy длиной 2 в измерении-0 и длиной 4 в измерении-1 со случайными значениями.
Пример 3
Чтобы создать трехмерный массив numpy со случайными значениями, передайте длины по трем измерениям массива в функцию rand().
В этом примере мы создадим трехмерный массив чисел длиной 4, 2, 3 по трем измерениям со случайными значениями.
Читайте также: