Обновлено:
Заполнить случайными числами
Нужно быстро создать набор данных для тестов, учебной задачи или прототипа игры? Заполнить структуру случайными числами можно онлайн или несколькими строками кода. Главное – правильно задать диапазон, количество элементов и тип значений: целые или дробные.
Как сгенерировать случайное число в заданном диапазоне?
Большинство языков дают функцию, которая возвращает число от 0 (включительно) до 1 (не включительно). Чтобы получить значение между min и max, применяют формулу:
Для целых чисел:
result = Math.floor(random() * (max - min + 1)) + min
Для дробных:
result = random() * (max - min) + min
Разница в +1 и округлении. Если пропустить единицу, верхняя граница диапазона выпадет реже остальных.
Заполнение массива в JavaScript
В браузерном JavaScript базовый инструмент – Math.random(). Чтобы заполнить массив из 10 элементов числами от 0 до 40, можно создать пустой массив нужной длины и преобразовать каждый элемент через map() ru.hexlet.io:
const generateArray = (length, max) =>
[...new Array(length)].map(() => Math.round(Math.random() * max));
const numbers = generateArray(10, 40);
console.log(numbers); // [36, 5, 9, 35, 23, 38, 27, 35, 34, 6]
Если нужен диапазон с отрицательными значениями, удобнее использовать библиотеку Lodash и её метод _.random(min, max):
const length = 10;
const min = -50;
const max = 50;
const numbers = [...Array(length)];
for (let i = 0; i < numbers.length; i += 1) {
numbers[i] = _.random(min, max);
}
// [3, -40, 16, -31, -21, 42, 3, 14, -6, 42]
Важно: Math.round() в сочетании с Math.random() даёт неравномерное распределение на краях диапазона. Для равномерного лучше использовать Math.floor().
Как создать список случайных чисел в Python
В Python генерация короче за счёт list comprehension. Модуль random покрывает большинство задач:
import random
length = 10
min_val = 1
max_val = 100
numbers = [random.randint(min_val, max_val) for _ in range(length)]
floats = [random.uniform(min_val, max_val) for _ in range(length)]
Если нужна выборка без повторов, random.sample() формирует уникальный набор за один вызов:
unique = random.sample(range(1, 101), 10)
Запись случайных чисел в файл на C++
В языке C++ заполнение файла случайными числами обычно совмещают с потоковым выводом. Классическая схема: ввести количество чисел, открыть ofstream и записать значения через цикл pro-prof.com:
#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;
int rand_between(int from, int to) {
return rand() % (to - from + 1) + from;
}
int main() {
int n;
cin >> n;
ofstream ofst("file.txt");
ofst << n << endl;
for (int i = 0; i < n; ++i) {
ofst << rand_between(1, 100) << " ";
}
}
Чтобы получить дробные числа, результат rand_between делят на константу, например 10.0.
Для новых проектов рекомендуется заменить rand() на генератор из <random>:
#include <random>
std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<> dist(1, 100);
int value = dist(gen);
Как получить дробные значения
Перевод целого генератора в дробный выполняется делением на масштабный коэффициент или сменой функции:
- JavaScript:
Math.random() * (max - min) + min - Python:
random.uniform(min, max) - C++:
std::uniform_real_distribution<double> dist(min, max);
При записи в файл важно явно указать тип double или float, иначе поток может вывести число как целое.
Где применяют случайные наборы чисел
- Тестирование ПО. Проверка сортировок, поиска и граничных случаев на непредсказуемых входных данных.
- Игровая логика. Генерация карт, лута, поведения противников.
- Наука и моделирование. Метод Монте-Карло, статистические эксперименты, случайные выборки.
- Анонимизация. Замена реальных идентификаторов псевдослучайными номерами в тестовых базах.
Часто задаваемые вопросы
Можно ли заполнить двумерный массив случайными числами?
Да. Используйте вложенные циклы или вложенные генераторы. В JavaScript подойдёт Array.from({length: n}, () => Array(m).fill().map(...)), в Python – [[random.randint(...) for _ in range(m)] for _ in range(n)].
Почему нельзя использовать Math.random() для паролей и токенов?
Math.random() создаёт псевдослучайные числа на основе внутреннего алгоритма браузера. Для криптографии используйте crypto.getRandomValues() в JavaScript или модуль secrets в Python.
Как избежать повторов при заполнении массива?
Сгенерируйте набор уникальных чисел, а затем перемешайте его. В Python для этого есть random.sample(range(min, max), count), в JavaScript – алгоритм Фишера-Йетса или фильтрация через Set.
Как записать случайные числа в файл без программирования?
Сгенерируйте набор в онлайн-калькуляторе выше, скопируйте результат и вставьте в текстовый файл. Также подойдут Excel и Google Таблицы: функции СЛУЧМЕЖДУ() и RANDBETWEEN().
Чем `rand()` в C++ отличается от генераторов в `<random>`?
rand() – устаревшая функция с низким качеством случайности и коротким периодом. Заголовок <random> предоставляет std::mt19937 и математически точные распределения, необходимые для научных расчётов.