Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Генерация псевдослучайных чисел
Для генерации псевдослучайных чисел используются следующие функции:
rand()
— генерирует псевдослучайное число от0
доRAND_MAX
. Прототип функции и определение макросаRAND_MAX
:
#include <cstdlib> /* или #include <stdlib.h> */
int rand(void);
#define RAND_MAX 0x7fff
Пример:
std::cout << std::rand() << std::endl; // 41
std::cout << std::rand() << std::endl; // 18467
std::cout << RAND_MAX << std::endl; // 32767
Чтобы получить случайное число от 0
до определенного значения, а не до RAND_MAX
, следует использовать оператор %
для получения остатка от деления. Пример получения числа от 0
до 10
включительно:
std::cout << std::rand() % 11 << std::endl;
Чтобы получить случайное число от rmin
до определенного значения rmax
(не включая это значение), например, от 5
до 10
включительно, можно воспользоваться следующим кодом:
int rmin = 5, rmax = 11;
std::cout << rmin + std::rand() % (rmax - rmin) << std::endl;
srand()
— настраивает генератор случайных чисел на новую последовательность. В качестве параметра обычно используется значение, возвращаемое функциейtime()
с нулевым указателем в качестве параметра. Функцияtime()
возвращает количество секунд, прошедшее с 1 января 1970 г. Прототипы функций:
#include <cstdlib> /* или #include <stdlib.h> */
void srand(unsigned int seed);
#include <ctime> /* или #include <time.h> */
time_t time(time_t *time);
Пример:
std::srand(static_cast<unsigned int>( std::time(nullptr) ));
std::cout << std::rand() << std::endl;
std::cout << std::rand() << std::endl;
std::cout << std::rand() << std::endl;
Если функция srand()
вызвана с одним и тем же параметром, то будет генерироваться одна и та же последовательность псевдослучайных чисел:
std::srand(100);
std::cout << std::rand() << std::endl; // 365
std::srand(100);
std::cout << std::rand() << std::endl; // 365
В качестве примера создадим генератор паролей произвольной длины (листинг 5.3). Для этого добавляем в массив arr
все разрешенные символы, а далее в цикле получаем случайный элемент из массива. Затем записываем символ, который содержит элемент массива, в итоговый символьный массив, адрес первого элемента которого передан в качестве первого параметра. В конец символьного массива вставляем нулевой символ. Следует учитывать, что символьный массив должен быть минимум на один символ больше, чем количество символов в пароле.
Листинг 5.3. Генератор паролей
#include <iostream>
#include <cstdlib>
#include <ctime>
void passw_generator(char *pstr, int count_char);
int main() {
char str[80] = "";
std::srand(static_cast<unsigned int>( std::time(nullptr) ));
passw_generator(str, 8);
std::cout << str << std::endl; // Выведет примерно QoNvNx7S
passw_generator(str, 8);
std::cout << str << std::endl; // 9csvgOaA
passw_generator(str, 10);
std::cout << str << std::endl; // gjDNM9dKtS
return 0;
}
void passw_generator(char *pstr, int count_char) {
const short SIZE = 62;
char arr[SIZE] = {'a','b','c','d','e','f','g','h','i','j',
'k','l','m','o','n','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L',
'M','N','O','P','Q','R','S','T','U','V','W',
'X','Y','Z','1','2','3','4','5','6','7','8','9','0'};
for (int i = 0; i < count_char; ++i) {
*pstr = arr[std::rand() % SIZE];
++pstr;
}
*pstr = '\0';
}
random
. За подробной информацией обращайтесь к документации.Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов