Главная » Статьи » Программирование » С++

Генератор случайных чисел в Си
Случайное событие. Как часто мы говорим о случайности  - о случайности встречи, о случайности происходящего, о непредвиденной случайности. Программирование также рассматривает случайность – только случайность чисел. Случайное число – это такое число, что нельзя предугадать в следующий раз. И получить такое число также очень сложно в программировании. Однако, несмотря на все сложности, генератор случайных чисел в программировании есть. Правда, это, скорее всего, псевдослучайные числа или некий обман того, что генератор нам продуцирует случайное число. Такое число появляется благодаря используемой формуле.   
 
Еще необходимо сказать о равномерном и неравномерном распределении случайных чисел. Если в утренний зимний день вы выйдете и увидите на земле лежащий снег и при этом он лежит ровным покрывалом, то вы поймете, что ночью, когда он падал, ветра не было, что дало возможность снежинкам лечь на землю равномерно. Если же вы заметите сугробы, где снега больше, и участки с отсутствующим снегом, то вы поймете, что ветер ночью был и сделаете вывод о неравномерном распределении снежного покрова.   
 
Когда мы говорим о мире чисел, то мы также можем говорить о их равномерном и неравномерном распределении. Каждый из счетчиков – это, как правило, числа с равномерным распределением. 
   
Чтобы в Си сгенерировать случайное число, необходимо заглянуть в библиотеку stdlib.h и отыскать там функцию rand(). Там же мы обнаружим еще одну полезную функцию srand (m). Библиотеку stdlib.h нам необходимо будет подключить с помощью директивы препроцессора #include и взять ее в вот такие скобки <>, после директивы.  
 
Пытаясь получить с помощью функции rand () случайное число целого типа, мы заметим, что выпадает-то постоянно одно и то же число. Проблема в том, что мы используем одну и ту же начальную точку для получения нашего псевдослучайного числа. Чтобы избежать этого, нам как раз и нужна функция srand (m). Именно она устанавливает начальную точку для получения случайного числа. Однако какова эта начальная точка? Как правило, наилучшим выходом в этой ситуации становится время и еще одна функция time (), что находится в библиотеке ctime. Эту библитеку мы также можем подключить с помощью директивы препроцессора #include. Теперь мы можем генерировать случайные числа в постоянно изменяющемся потоке системного времени с начальной точкой 1 января 1970 года. Да, и для достижения результата выставим в функции time () параметр NULL.
 
    srand (time (NULL));    
 
При генерировании псевдослучайных чисел мы получаем целые числа в диапазоне от 0 до 32767. Но нам же не всегда необходимы числа из столь большого диапазона чисел. Чтобы получить целое число из диапазона [0, b], нам необходимо осуществить деление по модулю:
 
   int k = rand ()%b;
 
Так мы сможем получить числа из диапазона от 0 до b– 1. Но чтобы получить числа из диапазона [a,b], мы должны еще добавить к нашей формуле a:
 
  K= rand () %b + a;
 
 А чтобы получить случайные вещественные числа из диапазона [a,b], нам необходима формула в таком виде:
 
  K= rand () * (b-a)/RAND_MAX +a;   где RAND_MAX– это граница нашего диапазона в 32767.  
Категория: С++ | Добавил: lesha (14.03.2015)
Просмотров: 5165 | Комментарии: 137 | Теги: с++, генератор случайных чисел | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: