Понятие генерация и использования псевдослучайных чисел
Автор: vare • Ноябрь 1, 2020 • Лабораторная работа • 617 Слов (3 Страниц) • 291 Просмотры
Цели
Улучшите навыки студента в области:
использование стандартных библиотечных функций;
использование векторов;
а также ознакомить студента с понятием генерации и использования псевдослучайных чисел.
Сценарий
Не думайте, что мы хотим побудить вас начать играть в азартные игры – ничто не может быть более неправильным. Мы только хотим, чтобы вы написали код, который пытается
"предсказать" (обратите внимание на кодировки) номера для лотереи.
Существует много различных лотерей, поэтому ваша программа должна быть гибкой. Он должен будет знать два основных параметра: сколько шаров находится внутри
машины и сколько их нарисовано. Поэтому ваш код должен ввести два значения int, отражающих эти ограничения.
Далее программа должна "нарисовать" (опять обратите внимание на кавычки) необходимое количество шаров. Чтобы смоделировать процесс рисования, мы будем использовать
так называемый " генератор псевдослучайных чисел – - алгоритм, производящий ряд чисел, которые ведут себя так, как если бы они были "нарисованы",
хотя эти значения строго детерминированы и (печально, но верно) полностью предсказуемы.
Вот небольшой фрагмент кода, показывающий вам, как его использовать:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(void) {
int max = 10;
srand(time(NULL));
int rnd = rand() % max + 1;
cout << rnd << endl;
return 0;
}
заголовочный файл "cstdlib" необходим, так как он предоставляет две функции: srand() и rand();
заголовочный файл "ctime" тоже нужен, потому что мы собираемся использовать функцию time() ;
функция "srand ()" инициализирует генератор – передача текущего значения тактового сигнала функция делает поведение генератора
более случайным, так как значение часов довольно непредсказуемо;
вызов функции "rand ()" дает нам псевдослучайное число из диапазона [0-RAND_MAX] (обратите внимание на скобки: они говорят что 0 и RAND_MAX также включены в диапазон); фактическое значение символа RAND_MAX зависит от реализации
и нам не нужно этого знать, так как мы хотим "нормализовать" возвращаемое значение в наш собственный диапазон: [1..Макс]; проанализируйте наш код осторожно и угадайте, как мы это сделали;
скомпилируйте код и запустите его несколько раз – вы увидите, что он выводит число, которое кажется "случайным" (другими словами: вы не будете
быть в состоянии предсказать это).
И вот идет код, который вы должны завершить. Мы хотим, чтобы он вел себя следующим образом:
он должен ввести два значения int (вы получили эту часть);
далее он должен "нарисовать" столько шаров, сколько захочет пользователь, но помните – вы не можете использовать одно и то же число более одного раза! Это означает, что вы должны создать массив для всех чисел, которые уже были нарисованы (используйте оператор "new"!) и проверьте
...