Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (7) здесь было Сб Июн 17, 2017 3:57 pm
Самые активные пользователи за неделю


Датчик случайных чисел / random

Предыдущая тема Следующая тема Перейти вниз

Датчик случайных чисел / random

Сообщение автор Ярослав в Чт Янв 12, 2017 3:09 pm

Очень полезный инструмент, когда пишете игры — датчик случайных чисел.

В C / C++ за случайные числа отвечает функция rand() (сокращение от random — случайный). У неё нет параметров, она возвращает случайное число в диапазоне от 0 до константы RAND_MAX. И функция rand(), и константа RAND_MAX определены в файле <stdlib.h>, так что его надо подключить в начале программы. Точное значение константы RAND_MAX зависит от компилятора. Я подглядел в <stdlib.h>, в случае нашей студии это число 32767.

Чтобы перейти от диапазона значений [0 ... 32767] к желаемому диапазону [0 .. N], нужно воспользоваться остатком от деления:

Код:
rand () % 10 // возвращает число от 0 до 9
rand () % 101 // возвращает число от 0 до 100

Если бы я захотел получить случайное число в диапазоне [1 .. 6] (сымитировать бросок игрального кубика), я бы сначала взял остаток от деления на 6; это бы дало диапазон [0 .. 5], а потом прибавил к полученному числу единицу.

Код:
int die = rand () % 6 + 1;

Подготовка датчика к работе

Один раз в начале программы, например, первой строчкой в main(), нужно вызвать функцию подготовки датчика случайных чисел к работе:

Код:
#include <stdlib.h>
#include <time.h>

int main () {
  srand (time (0));

Если этого не сделать, датчик будет выдавать от запуска к запуску программы одну и ту же последовательность случайных чисел. Это связано с тем, что настоящей случайности в компьютере нет. То, что кажется нам случайными числами, на самом деле вычисляется компьютером по определённой схеме. Такие числа назвают псевдослучайными.

Есть изначальное псевдослучайное число. Каждое следующее вычисляется на его основе с помощью фиксированной формулы, условно говоря:

Следующее псевдослучайное число = последнее псевдослучайное число * 7 + 120

Вместо констант 7 и 120 там будут какие-то другие, математики их подбирали, чтобы разброс псевдослучайных чисел был большим и равномерным. Суть в том, что если задано первое псевдослучайное число, то вся последующая последовательность предопределена. Нам нужно определить лишь первое псевдослучайное число любым случайным образом.

Этим занимается функция srand() (сокращение от seed random — засеять датчик случайных чисел). Мы ей передаём параметр — каким мы хотим сделать первое псевдослучайное число.

Что означает srand (time (0))? Это означает, что мы хотим узнать текущее время (функция time()), измеренное в секундах, начиная с 0:00 1 января 1970 года — это большое число, около полутора миллиардов — и этим числом засеять датчик. Если мы будем вызывать программу в разные моменты времени, то и датчик у нас будет проинициализирован разными числами.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения