Заполнение массивов случайными числами

Нередко возникает необходимость создать массив, который заполнен случайными значениями. В основном это используется для выделения памяти под массив или выполнения определенной задачи (генерация случайного пароля). В любом случае, сгенерировать случайные числа в си-подобных языках достаточно просто. Об этом в нашей статье.

Случайные и псевдослучайные числа

Обычные компьютеры не способны сгенерировать абсолютно случайные числа. Устройство не может взять значение из пустоты, а потому основывается на каких-либо изначальных значениях, например, на текущей дате.

Текущие дата и время: 03.08.2021, 20:35:21. Дату можно превратить в целое число сложив или перемножив значения: 3 * 8 * 2021 + 20 * 35 * 21= 48 504 + 14700 = 63 204.

По сути мы создали случайное число, потому что такая дата уже никогда не повторится. Однако, с точки зрения математики, число не является случайным, а псевдослучайным. Псевдослучайные значения внешне похожи на абсолютно случайные, но в отличие от последних, зависят от определенных факторов.

Интересный факт! Квантовые компьютеры, в отличие от обычных, способны генерировать абсолютно случайные числа. Это происходит благодаря явлению суперпозиции, когда квант может оказываться в нескольких местах одновременно.

Заполнение массива случайными значениями в языке C

Весь процесс состоит из трех шагов:

  1. Создание пустого массива;
  2. Создание случайного значения;
  3. Добавление значения в массив.

Обо всем по порядку

Генерация случайного числа

Ниже представлен код для создания одного случайного значения:

#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используется генератор случайных координат, который позволяет генерировать уникальные миры и постоянно перемещать персонажа в случайное место на карте.
  • Аналитическая выборка. Данный подраздел математики основывается на выборе случайного элемента и его анализе.
  • Симуляция. В природе все хаотично, потому при необходимости симулировать поведение объектов в естественной среде используется генератор случайных значений.
  • Криптография.

Заключение

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

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

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