Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Генерация случайных чисел на C/C++ с помощью rand()

Приветствую всех, кто заскочил. В это короткой заметке будет пара слов о генерации псевдослучайных чисел на C/C++. В частности о том, как работать с самой простой функцией генерации — rand().

Функция rand()

Находится в стандартной библиотеке С++(stdlib.h). Генерирует и возвращает псевдослучайное число в диапазоне от 0 до RAND_MAX. Эта константа может отличаться в зависимости от компилятора или архитектуры процессора, в основном, это максимальное значение типа данных unsigned int. Параметров не принимает и никогда не принимала.

Для того, чтобы генерация свершилась, нужно выставить семя(seed) с помощью вспомогательной функции из той же библиотеки — srand(). Она принимает число и ставит его в качестве отправной точки в генерации случайного числа. Если семя не выставить, то при каждом запуске программы, мы будет получать одинаковые случайные числа. Самым очевидным решением является отправить туда текущее системное время. Сделать это можно с помощью функции time(NULL). Эта функция находится в библиотеке time.h.

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

Пример использования функции генерации случайных чисел rand()

#include <ctime>
#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
    srand(time(NULL));

    for(int i = 0; i < 10; i++) {
        cout << rand() << endl;
    }

    return 0;
}

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

Выставить границы диапазона для rand()

Чтобы сгенерировать число в диапазоне от A до B включительно, нужно написать так:

A + rand() % ((B + 1) - A);

Значения границ могут быть в том числе и отрицательными, что позволяет генерировать отрицательное случайное число, посмотрим пример.

#include <ctime>
#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
    srand(time(NULL));

    int A = -2;
    int B = 8;

    for(int i = 0; i < 100; i++) {
        cout << A + rand() % ((B + 1) - A) << endl;
    }

    return 0;
}