У C++ існує кілька способів генерації випадкових чисел. Розглянемо основні методи.
#include <iostream>
#include <cstdlib> // для rand() і srand()
#include <ctime> // для time()
using namespace std;
int main()
{
// Ініціалізація генератора випадкових чисел
srand(time(0)); // Використовуємо поточний час як seed
// Генерація випадкового числа від 0 до RAND_MAX
int random1 = rand();
cout << "Випадкове число: " << random1 << endl;
// Генерація числа у діапазоні від 1 до 100
int random2 = rand() % 100 + 1;
cout << "Число від 1 до 100: " << random2 << endl;
return 0;
}
rand() - генерує псевдовипадкове число від 0 до RAND_MAXsrand() - ініціалізує генератор випадкових чисел (без цього будуть однакові послідовності)time(0) - використовує поточний час як "seed" для генератораrand() % N - отримання числа у діапазоні від 0 до N-1rand() генерує псевдовипадкові числа, які не є криптографічно стійкими. Для серйозних додатків використовуйте <random> (C++11).
#include <iostream>
#include <random> // Сучасний генератор випадкових чисел
using namespace std;
int main()
{
// Ініціалізація генератора
random_device rd; // Використовуємо апаратний генератор
mt19937 gen(rd()); // Вибір алгоритму (Mersenne Twister)
// Визначення діапазону
uniform_int_distribution<int> dist(1, 100); // Цілі числа від 1 до 100
uniform_real_distribution<double> dist_real(0.0, 1.0); // Дійсні числа
// Генерація чисел
cout << "Ціле число: " << dist(gen) << endl;
cout << "Дійсне число: " << dist_real(gen) << endl;
return 0;
}
| Тип розподілу | Приклад коду | Опис |
|---|---|---|
| Рівномірний (цілі числа) | uniform_int_distribution<int> dist(1, 6); |
Імітація кидання кубика (1-6) |
| Рівномірний (дійсні числа) | uniform_real_distribution<double> dist(0.0, 1.0); |
Числа від 0.0 до 1.0 |
| Нормальний розподіл | normal_distribution<double> dist(5.0, 2.0); |
Середнє 5.0, стандартне відхилення 2.0 |
#include <iostream>
#include <random>
#include <ctime>
using namespace std;
int main()
{
// Старий спосіб (не рекомендується)
srand(time(0));
cout << "Старий спосіб: " << rand() % 10 << endl;
// Сучасний спосіб (C++11)
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> dist(1, 49);
cout << "Лотерейне число: " << dist(gen) << endl;
// Генерація кольору RGB
uniform_int_distribution<int> color(0, 255);
cout << "Випадковий колір: RGB("
<< color(gen) << ", "
<< color(gen) << ", "
<< color(gen) << ")" << endl;
return 0;
}
<random>rand(), але не забувайте про srand()