Генерування випадкових чисел. Функції 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; }
⇑
Зв’язані теми
⇑