Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
25 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
366.04 kB
Просмотров:
117
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Генерация псевдо случайных](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img0.jpg)
Содержание слайда: Генерация (псевдо)случайных чисел в языке СИ
№2 слайд![Случайные числа. Генераторы](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img1.jpg)
Содержание слайда: Случайные числа. Генераторы случайных чисел
Современные компиляторы обладают собственной реализацией генератора псевдослучайных последовательностей.
Основная сложность генерации последовательности псевдослучайных чисел на компьютере в том, что компьютеры детерминированы по своей сути. Компьютер может находиться только в конечном количестве состояний (количество состояний огромно, но все-таки конечно). Следовательно любой датчик случайных чисел по определению периодичен. Все периодическое – предсказуемо, т.е. не случайно.
№3 слайд![Генераторы случайных чисел С](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img2.jpg)
Содержание слайда: Генераторы случайных чисел
С криптографической точки зрения они являются непригодными.
Лучшее, что может произвести компьютер – это псевдослучайная последовательность.
Период такой последовательности должен быть таким, чтобы конечная последовательность разумной длины не была периодической. Относительно короткие непериодические подпоследовательности должны быть как можно более неотличимы от
случайных последовательностей, в частности, соответствовать различным критериям
случайности.
№4 слайд![Генераторы случайных чисел](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img3.jpg)
Содержание слайда: Генераторы случайных чисел
Генератор последовательности называется случайным, если он не может быть достоверно воспроизведен, т.е. дважды запуская генератор с абсолютно одинаковыми
исходными данными (по крайней мере, на пределе возможностей), мы получим случайные различные последовательности.
Генератор псевдослучайной последовательности
выдает поток битов, который выглядит случайными, но в действительности является
детерминированным и может быть в точности воспроизведен.
№5 слайд![Линейный конгруэнтный](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img4.jpg)
Содержание слайда: Линейный конгруэнтный генератор псевдослучайных чисел
Линейный конгруэнтный генератор (ЛКГ) – это последовательность чисел от 0 до m −1, удовлетворяющая следующему рекуррентному выражению - начальное значение, a – множитель, b – приращение, m – модуль. У такого генератора период меньше m . Если a , b , m правильно выбраны, то генератор является генератором максимальной длины и имеет период m.
№6 слайд![Линейный конгруэнтный](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img5.jpg)
Содержание слайда: Линейный конгруэнтный генератор псевдослучайных чисел
Если инкремент b равен нулю, то есть генератор имеет вид:
получим самую простую последовательность, которую можно предложить для генератора с равномерным распределением. При соответствующем выборе констант a может принимать значения 75 либо 16 807 и m принимать значения
2 147 483 647 получим генератор с максимальным периодом повторения. Эти константы были предложены учеными Парком и Миллером, поэтому генератор вида:
называется генератором Парка-Миллера.
№7 слайд![Линейный конгруэнтный](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img6.jpg)
Содержание слайда: Линейный конгруэнтный генератор псевдослучайных чисел
Реализация генератора Парка-Миллера.
№8 слайд![Псевдослучайные числа в СИ](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img7.jpg)
Содержание слайда: Псевдослучайные числа в СИ
Функция, генерирующая псевдослучайные числа, имеет прототип в файле библиотеки stdlib.h
В этой библиотеке содержится функция rand(), которая и генерирует случайное число. Эта функция не принимает никакие параметры.
Функция rand() возвращает целое число от 0 до значения присвоенного константе RAND_MAX. Значение RAND_MAX зависит от системы и определено в заголовочном файле stdlib.h. Так, например, оно может быть равно 32767 (двухбайтовое целое) или 2147483647 (четырехбайтовое целое).
№9 слайд![Псевдослучайные числа в СИ](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img8.jpg)
Содержание слайда: Псевдослучайные числа в СИ
Функция, генерирующая псевдослучайные числа, имеет прототип в файле библиотеки stdlib.h
В этой библиотеке содержится функция rand(), которая и генерирует случайное число. Эта функция не принимает никакие параметры.
Функция rand() возвращает целое число от 0 до значения присвоенного константе RAND_MAX. Значение RAND_MAX зависит от системы и определено в заголовочном файле stdlib.h. Так, например, оно может быть равно 32767 (двухбайтовое целое) или 2147483647 (четырехбайтовое целое).
№10 слайд![Псевдослучайные числа в СИ](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img9.jpg)
Содержание слайда: Псевдослучайные числа в СИ
Значение RAND_MAX равно 32767 (двухбайтовое целое).
№11 слайд![Псевдослучайные числа в СИ](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img10.jpg)
Содержание слайда: Псевдослучайные числа в СИ
Код ниже выводит на экран 25 случайных чисел. В теле цикла осуществляется переход на новую строку после каждых выведенных на экран пяти чисел.
№12 слайд![Псевдослучайные числа в СИ](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img11.jpg)
Содержание слайда: Псевдослучайные числа в СИ
Для этого используется выражение, в котором находится остаток от деления i на 5, результат сравнивается с 0. Чтобы после первого числа не происходил переход на новую строку, i сначала присваивается единица, а не ноль (т.к. 0 делится на 5 без остатка).
№13 слайд![Функция rand При каждом](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img12.jpg)
Содержание слайда: Функция rand
При каждом запуске программы числа остаются одинаковыми. Даже если перекомпилировать программу, результат не изменится. Данный эффект связан с тем, что начальное (инициализирующее) число, которое подставляется в формулу вычисления первого и последующих псевдослучайных чисел, для каждой системы всегда одно и то же.
№14 слайд![Функция srand Однако это](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img13.jpg)
Содержание слайда: Функция srand
Однако это начальное число можно изменить с помощью функции srand(), которой в качестве параметра передается любое целое число.
Если вы зададите конкретный аргумент для функции, например, srand(1000), то от вызова к вызову программы числа будут также одни и те же. Хотя и не те, что были бы без srand(). Поэтому появляется проблема, как сделать так, чтобы аргумент для srand() был тоже случайным?
№15 слайд![Функция srand Пользователь](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img14.jpg)
Содержание слайда: Функция srand
Пользователь программы сам может задавать инициализирующее значение. Но чаще всего это не является полноценным выходом из ситуации. Поэтому инициализирующее значение привязывают к какому-либо процессу, протекающему в операционной системе, например, к часам. Время (учитывая не только время суток, но и дату) никогда не бывает одинаковым. Значит значение для srand(), преобразованное в целое из системного времени, будет различным.
№16 слайд![Функция srand Текущее время](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img15.jpg)
Содержание слайда: Функция srand
Текущее время можно узнать с помощью функции time(), прототип которой описан в файле time.h.
Функция time в соответствии с системными часами возвращает количество секунд, прошедших от 00:00:00 значения времени по Гринвичу,т.е. с 1 января 1980 года (или 1970 года). Возвращаемое значение хранится в расположении, заданном по timeptr. Если возвращаемое значение не запомнилось, адрес timeptr является NULL.
Передав time() в качестве параметра NULL, мы получим целое число, которое можно передать в srand() : srand(time(NULL));
№17 слайд![Функция srand Код ниже](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img16.jpg)
Содержание слайда: Функция srand
Код ниже выводит на экран 10 случайных чисел
№18 слайд![Функция rand Функция](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img17.jpg)
Содержание слайда: Функция rand
Функция возвращает случайное целое число в диапазоне от нуля до RAND_MAX. Чтобы ограничить сверху случайные числа, можно воспользоваться операцией получения остатка от деления. Остаток от деления на числа K всегда меньше числа K. Например, при делении на 4 могут получиться остатки 0, 1, 2 и 3. Поэтому если вы хотите ограничить сверху случайные числа числом K, то можно взять остаток от деления на K.
№19 слайд![Функция rand Генерация пяти](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img18.jpg)
Содержание слайда: Функция rand
Генерация пяти случайных целых чисел меньших K=10
№20 слайд![Функция rand В общем случае](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img19.jpg)
Содержание слайда: Функция rand
В общем случае если нам нужно получить числа из отрезка [A;B], то можно воспользоваться следующей конструкцией:
A + rand()%(B-A+1).
Например, необходимо получить случайные числа от 80 до 100.
Для этого используем выражение
80 + rand()%(100 - 80 + 1)
№21 слайд![Функция rand Пример программы](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img20.jpg)
Содержание слайда: Функция rand
Пример программы генерирующей числа в диапазоне [80;100]
№22 слайд![Функция rand](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img21.jpg)
Содержание слайда: Функция rand
№23 слайд![Функция rand Пример программы](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img22.jpg)
Содержание слайда: Функция rand
Пример программы генерирующей числа в диапазоне [0;1]
№24 слайд![Комментарии к практической](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img23.jpg)
Содержание слайда: Комментарии к практической работе 4
№25 слайд![Комментарии к практической](/documents_6/45622c4f35cc65e2c01decbfc55f2bd2/img24.jpg)
Содержание слайда: Комментарии к практической работе 4