Главная Учебники - Разные Лекции (разные) - часть 32
|
1.
Введение.
1.1.
Цель
работы. Овладение
навыками
алгоритмизации
и программирования
задач с использованием
датчиков случайных
чисел, способами
получения
случайных чисел
с различными
законами
распределения,
навыками оценки
качества
псевдослучайных
чисел и их
соответствия
заданному
закону распределения. Изучить: способы
получения
случайных
чисел с различными
законами
распределения; -способы
использования
в программах
обращений к
функциям или
подпрограммам
для получения
псевдослучайных
чисел с различными
законами
распределения; способами
использования
случайных
чисел для
моделирования. Разработать
алгоритм решения
в соответствии
с заданием. Составить
программу
решения задачи. Подготовить
тестовый вариант
программы и
исходных данных.
1. Выполнить
на ЭВМ программу
в соответствии
со следующим
заданием:
Сгенерировать
последовательность
из 50 случайных
чисел с нормальным
законом распределения
а=5,=4)
и последовательность
из 50 случайных
чисел с экспоненциальным
законом распределения
с параметром
=5.
Все числа свести
в массив, расположив
их по возрастанию.
Вычислить
среднее значение,
дисперсию и
вывести результаты
на печать в
виде гистограммы,
разбив последовательность
чисел на десять
интервалов 2.
Проверить
правильность
выполнения
программы с
помощью тестового
варианта.
2.
Руководство
программиста. Прежде,
чем приступить
к самому процессу
алгоритмизации
и программирования
заглянем в
теорию, по которой,
собственно,
и дано задание. 2.1.
Теоретическая
база. 2.1.1.
Нормальное
распределение.
Н
Мы
видим, что нормальное
распределение
определяется
двумя параметрами:
а и .
Достаточно
знать эти параметры,
чтобы задать
нормальное
распределение.
Покажем, вероятностный
смысл этих
параметров
таков: а есть
математическое
ожидание, —среднее
квадратическое
отклонение
нормального
распределения.
2.1.2
Показательное
(экспоненциальное)
распределение.
П где
- постоянная
положительная
величина.
Мы
видим, что
показательное
распределение
определяется
одним параметром
.
Эта особенность
показательного
распределения
указывает на
его преимущество
по сравнению
с распределениями,
зависящими
от большего
числа параметров.
Обычно параметры
неизвестны
и приходится
находить их
оценки (приближенные
значения);
разумеется,
проще оценить
один параметр,
чем два или три
и т. д. Примером
непрерывной
случайной
величины,
распределенной
по показательному
закону, может
служить время
между появлениями
двух последовательных
событий простейшего
потока. 2.2. Начало
алгоритмизации. Для
получения двух
последовательностей
из 50 случайных
чисел с показательным
и нормальным
законами
распределения
необходимо
организовать
цикл, который
будет выполнятся
50 раз. Внутри
цикла будем
пользоваться
функцией из
Турбо Паскаля
random(a) - эта функция
выдает произвольное
число из интервала
от 1 до a, a65535.
Каждое полученное
число будет
вносится в
массив, причем
первые 50 элементов
этого массива
получены по
нормальному
закону, а другие
50 - по показательному. Для
упорядочивания
массива случайных
величин создадим
двойной цикл.
Для расчета
мат. ожидания
и дисперсии
упорядоченного
массива также
создадим двойной
цикл, с учетом
того, что массив
уже надо разбить
на 10 частей
и расчет проводить
по каждому из
промежутков.
Для построения
гистограммы
воспользуемся
средствами
модуля Graph.tpu. Блок-схемой
основной программы
будет приведена
в приложении.
Также в приложении
будут размещщены
блок-схемы
подпрограмм-процедур,
используемых
в данной программе. Перед
процессом
программирования
составим таблицу
используемых
в программе
и подпрограммах
таблицу переменных
и констант. Таблица
1. Описание
переменных
и констант. Имя
переменной Назначение Тип
в Turbo Pascal i.j Переменные
циклов. Byte help,work,button Переменный
для хранения
параметров
вызова процедур. Byte actionprog,action Символьные
переменные
для управления
интерфейсной
частью .основной
программы и
процедур
соответственно. Char exitpar,exitmenu,exitprog Логические
параметры,
задающие выход
из процедур
и основной
программы.
Позволяют
делать программу
болле гибкой
в применении. Boolean grmode,grdriver Переменные,
содержащие
данные о типе
графического
драйвера и
его режиме
работы. Установленны
в программе
на автоматическое
определение. Integer Dat(3) Массив
для хранения
входных данных
в программе.
Начальное
знаачение
[5,4,5]. array[1..3]of
real Posle(100) Массив
для хранения
элементов
генерируемой
последовательности. array[1..100]
of real Xcor(3),Ycor(3) Массивы,
используемые
для более
компактности
ввода параматров
генерации
последовательности
в процедуре
DoWorkс параметром
work=1. array[1..3]of
byte Mat(10),Disp(10) Массивы
с данными о
дисперсии и
мат.ожидании
по промежуткам
последовательности. array[1..10]of
real mat0,disp0 Мат.ожидание
и дисперсия
по всей последовательности. Real X Временная
переменная
(буфер). Real Col(4) Массив
для управления
выбора пункта
меню. array[1..4]of
byte Light.Dark Константы
для задания
цветов меню. [1..16] 2.3.
Пояснения к
программе.
2.3.1.
Основная программа. В
начале основной
программы
происходит
задание первоначальных
параметров
меню, входных
данных по условию
задания и
автоматическое
определения
типа и режима
работы графического
адаптера. После
определения
происходит
первоначальная
(чернвая) прорисовка
интерфейсной
части программы.
Для этого
используется
три блока,
прорисовывающие
строку помощи
(drawhelp(0)),
диалогового
окна
(drawwin) и строки меню
(drawmenu(5)). Перехватчик
сообщений с
клавиатуры
(ReadKey)
позволяет
выбрать тот
или иной пункт
меню - о возможном
выборе можно
узнать в строке
подсказки в
низу экрана.
В зависимости
от выбора оператором
пункта меню
происходит
запуск «основной
работающей
программы»
- процедуры
dowork.
Для вызова этой
процедуры
используется
один параметр
– work.
Его возможные
значения: Таблица
2. Значение
параметра
work Действие 1 Задание
параметров
для построения
последовательностей. 2 Просмотр
последовательностей. 3 Просмотр
гистограммы. Работы
основной программы
заверщается
при истонном
значении переменной
exitprog,
чего можно
достичь комбинацией
Alt-x (об
этом тоже информирует
строка помощи).
2.3.2.
Процедура
drawhelp. Эта
процедура
полностью
предназначена
для навигации
оператора с
работой в программе.
Для
вызова используется
один параметр
(help),
чего достаточно
для вывода
полной подсказки
далнейших
действий. Ниже
приводится
таблица со
значением
параметра и
строки, которая
высвечивается
внизу экрана. Таблица
2. Значение
параметра
help Вид
строки помощи 0 F1-Парам.
F2-Посл-ти F3-Гистогр.
F10-Меню (Alt-x)-Выход 1 Задать/изменить
параметры 2 Просмотреть
последовательности 3 Просмотреть
гистограмму 4 Выход 5 Esc-Закончить
изменение
параметров.
BckSp-Изменить
параметр.
F4-Постр. посл-ть' 6 Нажмите
Up или Down для просмотра
или Esc для выхода
В
блок-схеме к
этой процедуре
использованы
сокращения.
Так s1
означает, что
help=1; s2 –
help=2 и так
далее.
2.3.3
Процедура
drawwin. Все,
что делает эта
процедура –
составление
диалогового
окна. Прорисока
окна идет посредством
обычной псевдографики
(ASCII-кодировка).
При это экран
делится на три
части. В верхней
происходит
уведомление
пользователя
о выборе пункта
меню, а в двух
нижних происходит
задание параметров
построения
последовательностей
(в случае вызова
dowork(1))
или же просмотр
последовательностей
(в случае вызова
dowork(2)).
Если не происходит
вызова dowork, то
окно остается
пустым, за
исключением
верхнего фрейма,
где написано
“Последовательности”. При
построении
схемы и в коде
программы не
используется
ни одной нестандартной
подпрограммы.
Схема тривиальна
и общедоступна.
2.3.4.
Процедура
dowork - «основная
работающая
программа». Основная
программа нужна
для организации
диалога с
пользователем.
Но, собственно,
сам диалог и
все действия
производятся
именно в этой
процедуре.
Именно этой
части программы
стоит уделить
наибольшее
внимание. Дальнейшее
пояснение будет
основываться
на таблице 2.
Ход повествования
прямым образом
зависит от
значения параметра
work.
В каждой части
вызывается
справка по
использованию
и горячим клавишам,
за исключением
третьей части
– вывода гистограммы. Первая
часть – задание/просмотр
параметров
генерации
последовательностей. Быстрый
вызов – F1. Здесь
происходит,
как ясно из
заголовка
пункта, задание
новых или просмотр
текущих параметров
для генерации
последовательностей.
На блок-схеме
этой подпрограммы
это блоки 1-30. Первым
делом происходит
разделение
верхнего фрейма
на два, в них
прорисовывается
пояснение –
в какой из частей
нижнего фрейма
для какого
закона распределения
задаются параметры. Для
удобного задания
параметров
используется
символьная
переменная
action.
Именно через
нее происходит
перехват событий,
от чего и зависит
изменить параметры,
оставить их
неизменными,
задать последовательности
или же выйти
из подпрограммы. Со
всеми возможными
действиями
данной и последующих
частей можно
познакомится
в пункте «Руководства
пользователя». Стоит
обратить внимание
на то, как происходит
ввод новых
параметров.
Положение
курсора для
ввода задается
двумя массивами
(они, как впрочем
и остальные
переменные,
описаны в таблице
1): Xcor(3), Ycor(3). Измененные
параметры
записываются
в массив Dat(3).
Подобная схема
очень удоьна
для испльзования
и для изменения
как конфигурации. Переход
между состоянием
просмотр/изменение
происходит
путем использования
кодов ASCII
для клавиш Esc,
Tab, Enter и F4
– генерация
последовательности. Параметр
справки – 5. Вторая
часть – просмотр
сгенерированной
последовательности. Быстрый
вызов – F2. На
блок-схеме
представлена
блоками 31-47. Просмотр
последовательности
происходит
через обычный
цикл по одному
параметру. Вся
последовательность
выводится по
двум столбам,
в каждом из
которых по 50
элементов.
Управление
просмотром
организовано
через коды
клавиш скролинга
(прокрутки) по
общепринятому
стандарту –
Up/Down.
Элементы выводятся
с приближением
до шести символов
после зяпятой,
дабы не засорять
рабочее пространство.
Параметр
справки – 6. Третья
часть – просмотр
гистограммы. Быстрый
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||