Архив рубрики ‘Другое’

Функція rand С++

Вторник, 3 Апрель 2018

Функція rand генерує ціле число в діапазоні між 0 і RAND_MAX (константа, визначена в заголовному файлі ). Значення RAND_MAX має щонайменше дорівнювати 32767. Якщо rand дійсно виробляє випадкові цілі числа, то при кожному виклику rand результуюче число має рівну імовірність виявитися будь-яким цілим, що лежить між 0 і RAND_MAX.
Діапазон значень, які виробляються безпосередньо функцією rand, відрізняється від діапазонів, які потрібно в спеціальних застосуваннях. Наприклад, програма, що моделює кидання монети, вимагає тільки двох значень: 0 для «орла» і 1 для «решки». Програмі, що моделює метання кістки з шістьма гранями, повинні б знадобитися випадкові цілі числа в діапазоні від 1 до 6.
Далі ми розглянемо програму моделювання 6000 кидань шестигранної гральної кістки з друком результату кожного кидання. Для того, щоб виробити цілі числа в діапазоні від 0 до 5, використовуємо операцію обчислення залишку % у поєднанні з rand:
rand() % 6
Це називається масштабуванням. Число 6 називається масштабуючим коефіцієнтом. Потім ми зміщуємо діапазон чисел, додаючи 1 до отриманого результату.
Ці операції можна записати в загальному вигляді:
n = а + rand() % b;
де а — величина зміщення (яка дорівнює першому числу в необхідному діапазоні послідовних цілих чисел), a b — масштабуючий коефіцієнт (який дорівнює ширині необхідного діапазону цілих чисел).
Необхідно відмітити, що функція rand насправді генерує псевдовипадкові числа. Повторний виклик rand генерую послідовність чисел, які здаються випадковими. Але та ж сама послідовність повторюється при кожному повторенні програми. Коли програма ретельно відлагоджена, вона може бути використана для отримання різних послідовностей випадкових чисел при кожному виконанні.
Це називається рандомізацією і реалізується в закінченому виді за допомогою стандартної бібліотечної функції srand. Функція srand отримує цілий аргумент unsigned і при кожному виконанні програми задає початкове число, яке функція rand використовує для генерації послідовності квазівипадкових чисел.
Якщо ми хочемо рандомізувати програму не вводячи кожного разу початкове число з клавіатури, можна використати оператор, подібний до наступного
srand(time(NULL));
При цьому для автоматичного отримання початкового числа комп'ютер прочитує показання свого годинника. Функція time (з аргументом NULL, як записано у вказаному вище операторові) повертає поточний «календарний час» в секундах. Це значення перетвориться у беззнакове ціле число і використовується як початкове значення в генераторі випадкових чисел