Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции / Генерирование случайных чисел

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
30.64 Кб
Скачать

Генерирование случайных чисел. Функции rand()srand()time(). Примеры

Конец формы

  1. Как в C++ сгенерировать случайное число? Функция rand ().

В языке C++ существуют средства для генерирования случайных чисел. Чтобы сгенерировать случайное число используется функция rand (), которая размещается в библиотечном файле stdlib.h.

Синтаксис объявления функции, следующий:

int rand ();

Функция возвращает случайное целочисленное значение, которое лежит в пределах значений типа int.

Пример 1.

#include <iostream>

#include <сstdlib>

using namespace std;

void main ()

{

// Получить случайное число

int x;

x = rand ();

cout << "x = " << x << endl;

// Получить еще одно случайное число

int y;

y = rand ();

cout << "y = " << y << endl;

}

Результат выполнения программы

x = 41

y = 18467

   2. Функция srand (). Назначение. Пример.

Если несколько раз запустить текст программы из п. 1, то будет получен один и тот же результат (одни и те же числа). Значит, сама по себе функция rand () генерирует одни и те же последовательности чисел. Чтобы получить разные последовательности чисел нужно объединить функцию rand () с функцией srand ().

Функция srand () из библиотеки сstdlib предназначена для установки начальной точки, из которой происходит генерирование случайных чисел.

Синтаксис описания (прототипа) функции, следующий:

void srand (unsigned int startValue);

здесь startValue – целочисленное значение, которое служит отправной точкой для генерирования последовательности случайных чисел функцией rand ().

Изменяя значение startValue, можно получать разные последовательности случайных чисел.

Пример 2.

#include <iostream>

#include <сstdlib>

using namespace std;

void main ()

{

// Установить начальную точку генерирования последовательности

srand (55);

// Получить случайное число

int x;

x = rand ();

cout << "x = " << x << endl;

// Получить еще одно случайное число

int y;

y = rand ();

cout << "y = " << y << endl;

}

Результат выполнения программы

x = 218

y = 9057

Если перед rand () не вызывается srand (), функция rand () ведет себя так, как если бы она была запущена srand (1).

  1. Функция time (). Назначение.

Сочетание функций rand ()srand ()time (). Пример.

Как видно из примера в п. 2, последовательность случайных чисел изменилась.

Если в функции srand () вместо числа 55 установить другое число, то будет получена другая последовательность.

Однако, текст программы статический и при многократном запуске программы это число будет неизменным.

В результате будет получаться одна и та же последовательность случайных чисел.

Во избежание этого недостатка, нужно чтобы стартовое значение в функции srand () постоянно изменялось.

Для того, чтобы в функции srand () получить разные начальные значения обычно используется функция time () из библиотеки ctime.h.

Если функцию time () вызвать с параметром 0, то эта функция возвратит количество миллисекунд, которые прошли с 1 января 1970 года. Значит, число миллисекунд будет зависеть от момента времени, в который пользователь запустил программу на выполнение. А этот момент каждый раз будет другим.

Если эти миллисекунды поместить в функцию srand () как показано ниже:

srand (time (0));

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

Пример. 

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

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

void main ()

{

// Установить начальную точку генерирования последовательности

// использовать функцию time (0)

srand(time(0));

// Получить случайное число

int x;

x = rand ();

cout << "x = " << x << endl;

// Получить еще одно случайное число

int y;

y = rand ();

cout << "y = " << y << endl;

}

Результат выполнения программы

x = 19040

y = 24635

  1. Как сгенерировать случайное целое число в заданных пределах?

Пример

В примере приведена функция GetRandomNumber (), которая генерирует случайное число в заданных пределах.

#include <iostream>

#include <cstdlib> // нужен для вызова функций rand (), srand ()

#include <ctime> // нужен для вызова функции time ()

using namespace std;

// Функция генерирования случайного целочисленного числа в указанных //пределах. Диапазон чисел: [min, max]

int GetRandomNumber (int min, int max)

{

// Установить генератор случайных чисел

srand (time (0));

// Получить случайное число - формула

int num = min + rand () % (max - min + 1);

return num;

}

void main ()

{

// Использование функции GetRandomNumber ()

int number;

number = GetRandomNumber (-10, 10); // Диапазон чисел: [-10, 10]

cout << "number = " << number << endl;

}

Заполнение двумерной матрицы случайными целыми числами в указанных пределах. Пример

Условие задачи. Дана двумерная матрица порядка n (n столбцов, n строк) целых чисел. Найти наибольшее из значений элементов, которые размещены в матрице. Значение элементов матрицы формируются случайным образом и находятся в пределах [-5; +5].

Текст программы следующий

#include <iostream>

#include <cstdlib> // нужен для вызова функции rand (), srand ()

#include <ctime> // нужен для вызова функции time ()

using namespace std;

void main ()

{

// Двумерные массивы.

// Вычислить максимальный элемент матрицы

// 1. Объявление переменных

const int MAX_N = 10; // максимально-допустимая размерность матрицы

const int MIN_VALUE = -5; // максимальное значение элементов матрицы

const int MAX_VALUE = 5; // минимальное значение

int A[MAX_N][MAX_N]; // исходная матрица

int n; // текущий размер матрицы n*n

int max; // результат - максимальное значение

// 2. Ввод n

cout << "n = ";

cin>> n;

// 3. Проверка n на корректность

if ((n <= 1) || (n > MAX_N))

{

cout << "Wrong size of array." << endl;

return;

}

// 4. Формирование матрицы A случайных чисел,

// установить генератор случайных чисел

srand(time(0));

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

for (int j = 0; j < n; j++)

{

// взять случайное число

A[i][j] = MIN_VALUE + rand() % (MAX_VALUE - MIN_VALUE + 1);

}

// 5. Вывести массив A для проверки

cout << endl << "Array A:" << endl;

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

{

for (int j = 0; j < n; j++)

cout << A[i][j] << '\t';

cout <<endl;

}

}

Формула для диапазона [min, max]:

int randNum = rand() % (max - min + 1) + min

6. Как сгенерировать случайное число с плавающей запятой в указанных пределах? Пример

В примере демонстрируется функция GetRandomNumberFloat (), которая генерирует случайное число с плавающей запятой в указанных пределах.

#include <iostream>

#include <cstdlib> // нужен для вызова функции rand (), srand ()

#include <ctime> // нужен для вызова функции time ()

using namespace std;

// Функция, которая генерирует случайное число с плавающей запятой и указанной точностью

// Функция получает 3 параметра:

// - min - нижний предел;

// - max - верхний предел;

// - precision - точность, количество знаков после запятой.

double GetRandomNumberFloat (double min, double max, int precision)

{

// Установить стартовую точку

srand (time (0));

double value;

// получить случайное число как целое число с порядком precision

value = rand () % (int) pow (10, precision);

// получить вещественное число

value = min + (value / pow (10, precision)) * (max - min);

return value;

}

void main ()

{

// Использование функции GetRandomNumberFloat ()

double number;

srand (time (0));

// Получить число в диапазоне [0; 2] с точностью 2

number = GetRandomNumberFloat (0, 2, 2);

cout << "number = " << number << endl;

}