2.47M
Category: programmingprogramming

Rand() — генератор случайных чисел

1.

rand() — Генератор случайных чисел
Функция rand() возвращает псевдослучайное целое
число в диапазоне от 0 до RAND_MAX. Чтобы получить
число в нужном диапазоне, можно использовать
оператор взятия остатка (%).
#include <iostream>
#include <cstdlib>
int main() {
Пример: чтобы получить число от 1 до 10, можно
std::cout << rand() << std::endl;
использовать выражение rand() % 10 + 1.
return 0;
}

2.

Проблема с rand()
Повторяемость
Предсказуемость
Без инициализации генератора случайных чисел,
Последовательность чисел, генерируемых rand(),
функция rand() будет выдавать одну и ту же
является предсказуемой, что может быть
последовательность чисел при каждом запуске
проблемой в некоторых приложениях, где
программы. Это происходит потому, что генератор
требуется высокая степень случайности.
начинает с одного и того же начального значения
(seed).

3.

Подробно о srand()
Начальная точка
Разнообразие
Функция srand() устанавливает начальную точку
Использование srand() с разным seed позволяет
(seed) для генератора случайных чисел.
получать разные последовательности случайных
чисел при каждом запуске программы.
#include <iostream>
#include <cstdlib>
int main() {
srand(123); // задаёт фиксированное начальное значение
std::cout << rand() % 100 << std::endl;
return 0;
}

4.

Для чего нужен seed?
Повторяемость
Разные результаты
Если необходимо получить воспроизводимую
Для получения разных результатов при каждом запуске
последовательность случайных чисел, можно
программы необходимо использовать seed, который
использовать фиксированный seed. Это полезно для
меняется каждый раз. Хорошим вариантом является
отладки и тестирования программ.
текущее время.

5.

Время как seed: srand() и ctime
ctime
Библиотека ctime предоставляет функции для работы со временем.
srand(time(0))
Использование time(0) в качестве seed позволяет получать разные последовательности случайных чисел
при каждом запуске программы.
rand()
rand() возвращает псевдослучайные числа

6.

Пример:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
srand(time(0));
for (int i = 0; i < 5; i++) {
std::cout << rand() % 100 << std::endl; // числа от 0 до 99
}
return 0;
}

7.

Что запомнить
rand()
Генерирует псевдослучайные числа.
srand(seed)
Задаёт стартовую точку генерации.
time(0)
Даёт текущее время, чтобы seed был разным.

8.

Библиотека ctime в C++
Основные типы и функции:
time_t - Тип данных для хранения времени (в секундах с 1 января 1970 года).
time() - Функция time(0) или time(NULL) возвращает текущее время в секундах.
Пример:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0); // Получаем текущее время
std::cout << now << std::endl;
return 0;
}

9.

localtime() и asctime()
Для отображения даты/времени в понятном виде можно использовать функции localtime() и asctime(). localtime() преобразует время,
полученное с помощью time(), в структуру tm, содержащую компоненты даты и времени. asctime() форматирует структуру tm в строку.
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Год: " << 1900 + ltm->tm_year << "\\n";
std::cout << "Месяц: " << 1 + ltm->tm_mon << "\\n";
std::cout << "Число: " << ltm->tm_mday << "\\n";
std::cout << "Время: " << ltm->tm_hour << ":" << ltm->tm_min << ":" << ltm->tm_sec << "\\n";
return 0;
}

10.

Практические задачи
Таймер ожидание(3)
Бросаем кости(2)
Напишите программу,
Смоделируйте бросок двух
которая показывает текущее
кубиков. Выведите значения
время и ожидает 5 секунд, а
каждого кубика и их сумму.
затем сообщает, сколько
времени прошло.
Генератор паролей(1)
Создайте программу, которая генерирует случайные пароли
заданной длины, используя различные символы (буквы, цифры,
специальные символы).
English     Русский Rules