Воскресенье, 19.05.2024, 04:08Приветствую Вас Гость | RSS
IT Solutions
Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 407
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Блог


Главная » 2013 » Декабрь » 4 » Генерация псевдослучайных чисел на С и С++
00:43
Генерация псевдослучайных чисел на С и С++

Часто при начальном тестировании программы надоедает  вводить разнообразные числа, чтобы проверить минимальную работоспособность программы. 
Поэтому для тех, кто не любит заранее приготовлять юнит-тесты (или не знает, что это такое), я расскажу как быстро присваивать своим переменным случайные значения.

 

Из языка С нам известна функция 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 */

Категория: С/C++ | Просмотров: 925 | Добавил: B@R_LOG | Теги: рандом в Си и Си++, rand(), рандом в С и С++, srand(), Генерация псевдослучайных чисел, случайные числа в С++ | Рейтинг: 5.0/70
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Категории раздела
Полезное [0]
Windows [0]
С/C++ [6]
SEO [0]
WEB [0]
Поиск
Друзья сайта
  • МЫ в "ВКонтакте"
  • Архив записей
    Календарь
    «  Декабрь 2013  »
    ПнВтСрЧтПтСбВс
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031
    Система Orphus