Заполнение массивов случайными числами
Нередко возникает необходимость создать массив, который заполнен случайными значениями. В основном это используется для выделения памяти под массив или выполнения определенной задачи (генерация случайного пароля). В любом случае, сгенерировать случайные числа в си-подобных языках достаточно просто. Об этом в нашей статье.
Случайные и псевдослучайные числа
Обычные компьютеры не способны сгенерировать абсолютно случайные числа. Устройство не может взять значение из пустоты, а потому основывается на каких-либо изначальных значениях, например, на текущей дате.
Текущие дата и время: 03.08.2021, 20:35:21. Дату можно превратить в целое число сложив или перемножив значения: 3 * 8 * 2021 + 20 * 35 * 21= 48 504 + 14700 = 63 204.
По сути мы создали случайное число, потому что такая дата уже никогда не повторится. Однако, с точки зрения математики, число не является случайным, а псевдослучайным. Псевдослучайные значения внешне похожи на абсолютно случайные, но в отличие от последних, зависят от определенных факторов.
Интересный факт! Квантовые компьютеры, в отличие от обычных, способны генерировать абсолютно случайные числа. Это происходит благодаря явлению суперпозиции, когда квант может оказываться в нескольких местах одновременно.
Заполнение массива случайными значениями в языке C
Весь процесс состоит из трех шагов:
- Создание пустого массива;
- Создание случайного значения;
- Добавление значения в массив.
Обо всем по порядку
Генерация случайного числа
Ниже представлен код для создания одного случайного значения:
#include <stdio.h>
int main()
{
intx = rand() % 10; // промежуток случайных чисел от 0 до 10
return 0;
}
Оператор rand() является встроенным в языке си и отвечает за генерацию случайных чисел. Генерируется число без логичных ограничений по размеру. То есть может сгенерироваться достаточно большое число с десятками разрядов.
Чтобы ограничить верхний порог случайного числа, используется операнд % (поиск остатка). Чтобы ограничить нижний порог (минимальное значение) достаточно проверить добавить проверку числа и если оно меньше минимума, прибавить к нему минимум.
Нужно сгенерировать число от 50 до 100. Оператор rand() сгенерировал число 520. С помощью поиска остатка, получаем число 20, которое меньше минимума. Чтобы это исправить, просто добавляем к 20 минимум 50 и получаем 70. На выходе получаем случайное число, которое соответствует требованиям.
Добавление случайного числа в массив
Первым делом создаем массив. Не будем усложнять задачу и сделаем статичный массив.
intrandomer[10] = {0}
for (i = 0; i< 10; i++) {
randomer[i] = rand() % 100; // диапазон случайных чисед от 0 до 100
printf(«%d «, mas[i]);
}
На выходе мы получаем массив из десяти случайных чисел.
Генерация на основе данных от пользователя
Если добавить человеческий фактор в алгоритм, то генерируемое число будет более случайным.
Рассмотрим написанный на C# код, который запрашивает у пользователя число, а после на его основе создает случайное число.
for (inti = 0; i< 100; i++)
{
Console.WriteLine(GenerateDigit() % x);
}
…
staticintGenerateDigit()
{
x = Console.ReadLine()
Random rng = new Random();returnrng.Next(10);
}
В примере мы сгенерировали случайное значение, а после запросили у пользователя любое число. На выводе мы разделили сгенерированное число на введённое и получили абсолютно новое значение.
Применение случайных чисел
Случайность используется везде, где важна непредсказуемость, а не точность. Ниже представлен небольшой список сфер, где применяются случайные числа:
- Геймдев. Например, в minecraftиспользуется генератор случайных координат, который позволяет генерировать уникальные миры и постоянно перемещать персонажа в случайное место на карте.
- Аналитическая выборка. Данный подраздел математики основывается на выборе случайного элемента и его анализе.
- Симуляция. В природе все хаотично, потому при необходимости симулировать поведение объектов в естественной среде используется генератор случайных значений.
- Криптография.
Заключение
Большинство современных языков программирования позволяют сгенерировать псевдослучайное число основываясь на определенных факторах. Спектр применение случайных чисел безграничен.