Часто при начальном тестировании программы надоедает вводить
разнообразные числа, чтобы проверить минимальную работоспособность программы.
Поэтому для тех, кто не любит заранее
приготовлять юнит-тесты (или не знает, что это такое), я расскажу как быстро
присваивать своим переменным случайные значения.
Из
языка С нам известна функция int rand ( void ) из библиотеки <stdlib>, которая
генерирует случайное число от 0 до RAD_MAX ( ~ 32767).
Пусть наше значение int value = 0;
Что нам нужно сделать, чтобы получить случайное число от 0 до 9?
value = rand( ) % 10;
А если мы хотим от 1 до 9?
value = rand( ) % 9 + 1;
Функция rand( ) генерирует последовательность значений,
вычисляемую по специальному алгоритму, который зависит от "зерна"
(seed), по умолчанию равного единице.
Поэтому последовательность всегда одинакова.
А что делать, если нам нужна уникальная последовательность
значений при каждом присваивании?
Для этого воспользуемся void srand(unsigned int
seed) (эта функция то же из <stdlib> ), которая меняет "зерно".
srand( 3 ); value_1 =
rand();
srand( 5 ); value_2 = rand(); Теперь value_1
не равно value_2.
Отлично! Теперь
мы можем задавать огромное количество случайных
последовательностей неравных друг другу, просто меняя значения зерна.
Ну а если я хочу, чтобы при повторном запуске программы все
зёрна изменились?
Для этого воспользуемся функцией time_t time (time_t*
timer) из <ctime>, которая при вызове с нулевым указателем
возвращает количество секунд прошедших с 1 января 1970 года.
srand( time(NULL) );
value_1 = rand(); /* теперь value_1 всегда разное */
srand( time(NULL) + 1);
value_2 = rand(); /* и value_1 всегда не равно value_2 */
|