Заполнить массив случайными числами в C++

Как преобразовать строку в int в C++ Программирование и разработка

Заполнение массива случайными числами звучит просто, если предположить, что массив состоит из 10 элементов. Для этого сгенерируйте случайное число и поместите его в массив в качестве первого элемента. Сгенерируйте еще одно случайное число и вставьте его в качестве второго элемента. Затем снова сгенерируйте третье случайное число и введите его в качестве третьего элемента. Продолжайте таким образом, пока не будет достигнут десятый элемент.

Тем не менее, есть и другие вещи, на которые следует обратить внимание, прежде чем кодировать это. Случайные числа, сгенерированные C++20, следуют определенной последовательности. Таких последовательностей много, поэтому случайные числа не являются действительно случайными. Пользователь программы вряд ли сможет узнать, какую последовательность выбрал программист и как определить следующее число при вызове случайной функции в том же коде.

Каждая последовательность имеет начальный номер. Семя связано с начальным номером последовательности. Каждая последовательность зависит от начального числа и распределения последовательности. Распределение последовательности является профилем последовательности.

В этой статье объясняется, как заполнить массив случайными числами, начиная с классов: random_device, default_random_engine и uniform_int_distribution. Все эти классы находятся в случайной библиотеке, которую необходимо включить. Скелет программы для заполнения массива из 10 элементов случайными числами выглядит следующим образом:

    #include <iostream>
#include <random>
using namespace std;

int arr[10];

int main()
{
//statements
return 0;
}

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

Engine и Distribution

В этой теме движок — это генератор случайных чисел.

random_device

Это класс, из которого создаются экземпляры объектов. Объект этого класса — это устройство, а не двигатель. Это нуждается в генераторе, чтобы быть полезным. Генератор может принимать в качестве аргумента random_device.

default_random_engine

Движок в этой теме генерирует случайные числа. Существуют разные движки, из которых программист может выбирать. Это нужно выбирать, когда программист не уверен, какой движок выбрать. Это класс, из которого создаются экземпляры объектов. Он принимает объект random_device в качестве аргумента.

uniform_int_distribution

Программист может выбирать из множества профилей распределения последовательностей. Для этой статьи выбрано:uniform_int_distribution. Это класс, из которого можно создавать объекты. Его конструкция использует в качестве аргумента движок, а также нижний и верхний предельные числа для случайных чисел. На самом деле это шаблон класса. Один из его синтаксисов конструкции:

explicit uniform_int_distribution(IntType a, IntType b = numeric_limits<IntType>::max());

Следующие три утверждения работают вместе:

random_device rd;

default_random_engine eng(rd());

uniform_int_distribution<int> dist(4, 13);

От 4 до 13 — десять целых чисел, включая нижний и верхний пределы. Специализация шаблона для объекта распределения dist — int. Таким образом, из этого диапазона можно выбрать десять различных случайных чисел (4–13). Обратите внимание, что аргументом для eng() является rd(), а не rd. Также обратите внимание, что любой арифметический тип может быть специализацией шаблона для этой конструкции распределения.

Из этого кода для получения следующего случайного числа используйте «dist(eng);».

Создание десяти случайных целых чисел

Следующая программа выдает десять случайных целых чисел от 4 до 13 включительно.

    #include <iostream>
#include <random>
using namespace std;

int main()
{
random_devicerd;
default_random_engineeng(rd());
uniform_int_distributiondist(4, 13);

cout<<dist(eng) << ‘ ‘  <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<endl;
cout<<dist(eng) << ‘ ‘  <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<dist(eng) << ‘ ‘ <<endl;

return 0;
}

Вывод с компьютера автора:

7 10 4 10 6

8 12 6 12 8

Некоторые числа встречались более одного раза. Программа начинается с включения библиотеки iostream для ввода и вывода. После этого включается случайная библиотека для случайных чисел. Следующая строка является оператором, а не директивой. Заканчивается точкой с запятой. Он настаивает на том, чтобы любое имя, которому не предшествует «std::», принадлежало стандартному пространству имен.

Затем идет основная функция С++. Первые три утверждения функции main были объяснены ранее. В следующем сегменте кода dist(eng) выводит следующее случайное число; разумеется, в пределах диапазона (включительно), заданного в качестве аргументов конструктору дистрибутива.

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

В приведенном выше коде было создано десять случайных чисел с помощью выражения dist(eng). Это было напечатано десять раз. Его можно ввести один раз и вызвать десять раз, если это делается в цикле for. Цикл for должен повториться десять раз. В этой ситуации возвращаемое случайное число не будет отправлено на терминал (экран); он будет отправлен в следующее местоположение элемента массива. Следующая программа иллюстрирует это:

    #include <iostream>

#include <random>

using namespace std;
int arr[10];
int main()
{
random_devicerd;
default_random_engineeng(rd());
uniform_int_distributiondist(4, 13);

for (int i=0; i<10; i++)
arr[i] = dist(eng);

for (int i=0; i<10; i++)
cout<<arr[i] << ‘ ‘;
cout<<endl;
return 0;
}

На этот раз вывод компьютера автора:

9 8 12 10 8 10 8 5 4 11

Обратите внимание, как был закодирован первый цикл for. Конечно, можно выбрать любой диапазон, следующая программа использует диапазон от 0 до 100:

    #include <iostream>
#include <random>
using namespace std;
int arr[10];
int main()
{
random_devicerd;
default_random_engineeng(rd());
uniform_int_distributiondist(0, 100);

for (int i=0; i<10; i++)
arr[i] = dist(eng);

for (int i=0; i<10; i++)
cout<<arr[i] << ‘ ‘;
cout<<endl;
return 0;
}

На этот раз вывод компьютера автора:

43 52 52 24 90 81 21 72 33 42

Хотя диапазон содержит более десяти целых чисел, было получено только десять случайных чисел, как было определено первым циклом for.

Заключение

Выполните следующую процедуру, чтобы заполнить массив случайными числами: сгенерируйте случайное число и поместите его в массив в качестве первого элемента. Сгенерируйте еще одно случайное число и вставьте его в качестве второго элемента. Сгенерируйте третье случайное число и введите его в качестве третьего элемента. Продолжайте таким образом, пока не будет достигнуто необходимое количество случайных чисел. Следующий сегмент кода важен:

int arr[10];

random_device rd;

default_random_engine eng(rd());

uniform_int_distribution<int> dist(0, 100);

for (int i=0; i<10; i++)

arr[i] = dist(eng);

Читайте также:  Лучший язык для веб-разработки: популярные языки программирования для изучения
Оцените статью
bestprogrammer.ru
Добавить комментарий