Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab06_Prog_cpp_.rtf
Скачиваний:
6
Добавлен:
10.11.2019
Размер:
2.75 Mб
Скачать

Лабораторная работа №6

Генератор случайных чисел

В языке C, как и во многих других языках высокого уровня, существует встроенная поддержка генератора случайных чисел. Генератор случайных чисел описан в библиотеке stdlib. Для формирования чисел используется программный ГСЧ, существующий в программе в единственном экземпляре. Таким образом, с его помощью нельзя параллельно генерировать несколько независимых случайных последовательностей без специальных ухищрений. Тем не менее, одного ГСЧ достаточно для большинства прикладных задач.

В Borland C++ (как и во многих других реализациях C/C++) используется линейный конгруэнтный ГСЧ. Длина периода этого ГСЧ составляет 232 числа.

Для работы с ГСЧ в языке C предусмотрены следующие функции:

  1. int rand()

Возвращает случайное целое число в диапазоне от 0 до RAND_MAX, где RAND_MAX – некоторая константа, зависящая от конкретной реализации ГСЧ. В Borland C++ значение RAND_MAX=32767.

  1. int random (int max)

Возвращает случайное целое число в диапазоне от 0 до max‑1.

  1. void srand (unsigned seed)

Устанавливает новое зерно ГСЧ. Обычно используется для установки известного начального значения x0 при отладке программы.

  1. void randomize()

Устанавливает начальное значение, полученное из текущего системного времени путем путем преобразования его в целое число. Обычно используется для сброса ГСЧ в начале программы с целью предотвращения генерирования одних и тех же последовательностей. Не рекомендуется использовать в процессе отладки, т. к. последовательность, выбранную вызовом randomize(), сложно воспроизвести. Кроме того, не рекомендуется вызывать слишком часто или через фиксированные промежутки времени, т. к. это снизит качество («случайность») генерируемых последовательностей.

Пример. Для того чтобы при разных запусках программы не появлялся один и тот же набор случайных чисел, в программе меняется номер набора при помощи оператора srand(n); n берется из встроенного в компьютер таймера.

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

void main()

{

time_t t;

srand((unsigned) time(&t));

printf("Ten random numbers from 0 to 99\n\n");

for(int i=0; i<10; i++)

printf("%d ", random(100));

}

Задания: Задача 1

Получить с помощью генератора случайных чисел 200 значений в указанном диапазоне (соответственно варианта):

1. действительные числа, в диапазоне от –50 до 50;

2. целые числа, в диапазоне от –20 до 20;

3. неотрицательные действительных чисел, не превосходящих 40;

4. действительные, от –2,3 до 10,7 с шагом 0,1;

5. прописные латинские буквы;

6. действительные числа, в диапазоне от –100 до 100;

7. натуральные числа, не превосходящие 20;

8. целые, от 3 до 12;

9. из множества {–3, 0, 6, 9, 12, 15};

10. из множества {–30; 10; 63; 59; 120; 175};

11. неотрицательные целые числа, не превосходящие 1000;

12. действительные, от 3 до 12;

13. из множества {1; 0,1; 0,01; …; 10–15};

14. строчные латинские буквы;

15. прописные буквы кириллицы.

Задача 2

По значениям из предыдущей задачи оценить равномерность распределения. Разбить интервал на 10 интервалов равной длины и построить горизонтальную гистограмму (столбчатую диаграмму), показывающую, сколько значений попало в каждый интервал.

Пример гистограммы для интервала (0,1):

0.0..0.09 *******

0.1..0.19 *********

0.2..0.29 ********

0.9..1.0 *******

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]