Пилипчук О.П., вчитель інформатики Гаврилівської ЗОШ Теофіпольського району Хмельницької області
Функції для роботи з випадковими числами в C++
Для ефективного використання в програмі випадкових чисел потрібно принаймні два засоби:
- функція-генератор, яка при кожному виклику повертатиме випадкове число;
- функція-ініціалізатор для випадкової ініціалізації генератора.
Необхідність в другій функції викликана тим, що випадкові числа, отримані програмним шляхом, насправді є псевдо-випадковими. Вони обчислюються за певною формулою і за однакових початових умов послідовність чисел буде повторюватись. При виклику функції-ініціалізатора для функції-генератора встановлюється нове початкове значення.
Мова C++ пропонує цілу низку стандартних функцій для роботи з випадковими об'єктами. Так склалось, що деякі з них подібні за призначенням, а деякі не завжди доступні, що іноді викликає плутанину. Розглянемо основні функції детальніше.
Функції rand і srand
int rand(void);
- функція-генератор випадкових чисел з періодом 2 в 32 степені. При кожному виклику повертає наступне псевдо-випадкове число в межах від 0 до RAND_MAX. RAND_MAX - символьна константа, оголошена у файлі stdlib.h, яка визначає найбільше випадкове число.
Портабельність: POSIX, Win32, ANSI C, ANSI C++.
void srand(unsigned seed);
- ініціалізує генератор випадкових чисел. Початкова ініціалізація відбувається викликом srand
з аргументом 1. Нове початкове значення встановлюють викликом цієї функції з іншим аргументом.
Портабельність: POSIX, Win32, ANSI C, ANSI C++.
Функції random і randomize
Ці функції доступні лише на платформі Win32, отже підтримуються не всіма компіляторами.
int random(int num);
- функція-генератор випадкових чисел. Повертає псевдо-випадкове число в межах від 0 до num-1.
Портабельність: Win32.
void randomize(void);
- ініціалізує генератор випадкових чисел випадковим чином.
Портабельність: Win32.
Приклад використання
Задача. Вивести 50 випадкових цілих чисел з діапазону від 0 до 100.
- з використанням rand()
і srand()
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int main()
{
time_t t;
srand((unsigned) time(&t));
for (int i=0; i<50; i++)
cout<<rand()%101<<' ';
system ("pause");
return 0;
}
Варіант від користувача fox11 (додано 9.02.2020):
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
for (int i=0; i<50; i++)
cout<<rand()%101<<endl;
}
- з використанням random()
і randomize()
#include <iostream>
using namespace std;
int main()
{
int t;
randomize();
for (int i=0; i<50; i++)
cout<<random(101)<<' ';
system ("pause");
return 0;
}
Интернет реклама