Генерирование случайных чисел. Функции rand(), srand(), time(). Примеры
Содержание
- 1. Как в C++ сгенерировать случайное число? Функция rand(). Пример
- 2. Функция srand(). Назначение. Пример
- 3. Функция time(). Назначение. Сочетание функций rand(), srand(), time(). Пример
- 4. Как сгенерировать случайное целое число в заданных пределах? Пример
- 5. Заполнение двумерной матрицы случайными целыми числами в указанных пределах. Пример
- 6. Как сгенерировать случайное число с плавающей запятой в указанных пределах? Пример
- Связанные темы
Поиск на других ресурсах:
1. Как в C++ сгенерировать случайное число? Функция rand(). Пример
В языке C++ существуют средства для генерирования случайных чисел. Чтобы сгенерировать случайное число используется функция rand(), которая размещается в библиотечном файле stdlib.h. Синтаксис объявления функции следующий:
int rand();
Функция возвращает случайное целочисленное значение, которое лежит в пределах от 0 до 32767.
Пример.
#include <iostream> #include <stdlib.h> 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.h предназначена для установки начальной точки, из которой происходит генерирование случайных чисел. Синтаксис объявления функции следующий:
void srand(unsigned int startValue);
здесь startValue – целочисленное значение, которое служит отправной точкой для генерирования последовательности случайных чисел функцией rand(). Изменяя значение startValue, можно получать разные последовательности случайных чисел.
Пример.
#include <iostream> #include <stdlib.h> 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
⇑
3. Функция time(). Назначение. Сочетание функций rand(), srand(), time(). Пример
Как видно из примера в п. 2, последовательность случайных чисел изменилась. Если в функции srand() вместо числа 55 установить другое число, то будет получена другая последовательность. Однако, текст программы статический и при многократном запуске программы это число будет неизменным. В результате будет получаться одна и та же последовательность случайных чисел. Во избежание этого недостатка, нужно чтобы стартовое значение в функции srand() постоянно изменялось.
Для того, чтобы в функции srand() получить разные начальные значения используется функция time() из библиотеки time.h.
Если функцию time() вызвать с параметром NULL, то эта функция возвратит количество миллисекунд, которые прошли с 1 января 1970 года. Значит, число миллисекунд будет зависеть от момента времени, в который пользователь запустил программу на выполнение. А этот момент каждый раз будет другим.
Если эти миллисекунды поместить в функцию srand() как показано ниже
srand(time(NULL));
то каждый раз при запуске программы будет создана новая отправная точка в генерировании последовательности чисел функцией rand(). И, как следствие, будут получаться разные последовательности случайных чисел.
Пример. В примере демонстрируется генерирование последовательности из двух случайных чисел. Каждый раз при запуске программы будет получена новая последовательность.
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void main() { // Установить начальную точку генерирования последовательности // использовать функцию time(NULL) srand(time(NULL)); // Получить случайное число int x; x = rand(); cout << "x = " << x << endl; // Получить еще одно случайное число int y; y = rand(); cout << "y = " << y << endl; }
Результат выполнения программы
x = 19040 y = 24635
⇑
4. Как сгенерировать случайное целое число в заданных пределах? Пример
В примере приведена функция GetRandomNumber(), которая генерирует случайное число в заданных пределах.
#include <iostream> #include <stdlib.h> // нужен для вызова функций rand(), srand() #include <time.h> // нужен для вызова функции time() using namespace std; // Функция генерирования случайного целочисленного числа в указанных пределах. // Диапазон чисел: [min, max] int GetRandomNumber(int min, int max) { // Установить генератор случайных чисел srand(time(NULL)); // Получить случайное число - формула int num = min + rand() % (max - min + 1); return num; } void main() { // Использование функции GetRandomNumber() int number; number = GetRandomNumber(-10, 10); // Диапазон чисел: [-10, 10] cout << "number = " << number << endl;; }
⇑
5. Заполнение двумерной матрицы случайными целыми числами в указанных пределах. Пример
Условие задачи. Дана двумерная матрица порядка n (n столбцов, n строк) целых чисел. Найти наибольшее из значений элементов, которые размещены в закрашенной части матрицы. Значение элементов матрицы формируются случайным образом и находятся в пределах [-5; +5].
Текст программы следующий
#include <iostream> #include <stdlib.h> // нужен для вызова функции rand(), srand() #include <time.h> // нужен для вызова функции 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(NULL)); 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; } // 6. Вычисление максимального значения bool f_first = true; // флажок первого элемента for (int i = 0; i < n; i++) // i - строки for (int j = 0; j < i; j++) // j - столбцы if (f_first) { // первый элемент принимается максимальным max = A[i][j]; f_first = false; } else { if (max < A[i][j]) max = A[i][j]; } // 7. Вывод результата cout << endl << "max = " << max << endl; }
⇑
6. Как сгенерировать случайное число с плавающей запятой в указанных пределах? Пример
В примере демонстрируется функция GetRandomNumberFloat(), которая генерирует случайное число с плавающей запятой в указанных пределах.
#include <iostream> #include <stdlib.h> // нужен для вызова функции rand(), srand() #include <time.h> // нужен для вызова функции time() using namespace std; // Функция, которая генерирует случайное число с плавающей запятой и указанной точностью // Функция получает 3 параметра: // - min - нижний предел; // - max - верхний предел; // - precision - точность, количество знаков после комы. double GetRandomNumberFloat(double min, double max, int precision) { // Установить стартовую точку srand(time(NULL)); 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(NULL)); // Получить число в диапазоне [0; 2] с точностью 2 знака после запятой number = GetRandomNumberFloat(0, 2, 2); cout << "number = " << number << endl; }
⇑
Связанные темы
⇑