МОДЕЛИРОВАНИЕ СЛУЧАЙНЫХ ВЕЛИЧИН
Методические указания к лабораторной работе №1 по дисциплине
"Моделирование информационных процессов и систем"

[Титульная страница | Оглавление | Предыдущая страница | Следующая страница ]


3. ТЕХНОЛОГИЯ ПОСТРОЕНИЯ МОДЕЛИРУЮЩИХ ПРОГРАММ В Borland C++ 3.1

Начнем с текста программы моделирование случайной величины равномерно распределенной в интервале от 1,5 до 3,5.

Программа 1 ( исходный файл lect1_1.cpp , выполняемый файл lect1_1.exe )
#define N 500 // Число отрезков для вычисления плотности
// распределения вероятности
#define M 100000L // Число экспериментов
#include
#include "model.h" // Подключение заголовочного файла с описанием
// шаблонов функций графического вывода
float sl_vel(float a, float b); // Описание функции, выдающей значение
// случайной величины с равномерной плотностью
// распределения вероятности в интервале
//от а до b
float f[N]; // Массив для значений оценки плотности
// распределения вероятности
void main(void)
{ long m;
   float x, a = 1.5, b = 3.5, d;
    int n ;
// Индекс для номера эксперимента
        d = (b-a)/N ; //величина отрезка случайной величины х
     for(m =0; m < M; m++)
     { x = sl_vel(a,b);
           n = (x - a) / (b - a) * N;
             f[n] = f[n] + 1;
     }
// Цикл по числу экспериментов
          for (n=0; n < N; n++) // Пересчет вероятности в плотность
// распределения вероятности
           f[n] = f[n] / ( M * d );
    Init_graph(); // Инициализация графической библиотеки
        graf_1("plotnoct ", f, 0, N-1); // Вывод на график
    Close_graph();
}
// Переход в текстовый режим
float sl_vel( float a, float b) // Функция, формирующая значение случайной
//величины с равномерной плотностью
// распределения вероятности в интервале
//от a до b ( a x < b ).
{  float x;
     x = random(30000)/30000.;
     x = a + (b-a) * x;
  return x;
}

Рассмотрим далее, каким образом выполнить данную программу в среде Borland -C++3.1. Во-первых, эта и дальнейшие программы будут использовать ряд сервисных графических функций ввода-вывода. Эти функции находятся в файле model.cpp. В свою очередь, описание шаблонов этих функций располагается в файле model.h. Поэтому порядок выполнения данной программы и всех последующих должен быть следующий:

  1. Написать текст моделирующей программы в каком-нибудь файле, например, my_prog1.cpp ( расширение cpp обязательно ).
  2. Открыть новый проект. Для этого надо войти в меню Project и в разделе Open project ввести имя нового файла проекта, например, my_pro1.prj. Расширение prj обязательно.
  3. В этот новый проект надо включить Ваш файл (my_prog1.cpp) и файл model.cpp. Для этого опять нужно войти в меню Project и выбрать раздел Add Item. Далее в появившемся окне последовательно выбрать my_prog1.cpp (выделив и нажав кнопку Add) и model.cpp (аналогично).
  4. Открыть раздел Options и в разделе Linker выбрать строку Libraries. В появившемся окне установите флажок напротив Graphics Library.
  5. Теперь можно выполнить проект (меню Run раздел Run).

Следует обратить внимание на то, что в рабочем каталоге (каталог, из которого Вы переходите в среду - вызываете bc.exe) должны быть четыре файла model.cpp, model.h, egavga.bgi , trip.chr.

Далее перечислим ряд сервисных функций находящихся в файле model.cpp:

1)    функция, обеспечивающая вывод на график:
void graf_1(char *stroka, float *s1, int n_begin, int n_end ).
Здесь stroka - указатель на строку, содержащую название графика (это будет фактически подпись на графике),
s1 - имя массива (указатель на массив), выводимого на график,
n_begin - индекс начального элемента массива, выводимого на график,
n_end - индекс последнего элемента массива, выводимого на график;
2) функция, обеспечивающая вывод двух массивов данных на график:
void graf_2( char *stroka, float *s1, float *s2, int n_begin, int n_end).
Новым параметром относительно предыдущей функции является:
s2 - имя второго массива, выводимого на график.
Максимальное значение по вертикальной оси на графике соответствует максимальному значению среди значений элементов обоих массивов. Соответственно минимальное значение по вертикальной оси на графике соответствует минимальному значению среди значений элементов обоих массивов;
3) функция, обеспечивающая вывод трех массивов данных на график void graf_3( char *stroka, float *s1, float *s2, float *s3, int n_begin, int n_end ).
Новым параметром относительно предыдущей функции является:
s3 - имя третьего массива выводимого на график.
Максимальное значение по вертикальной оси на графике соответствует максимальному значению среди значений элементов всех трех массивов. Соответственно минимальное значение по вертикальной оси на графике соответствует минимальному значению среди значений элементов всех трех массивов;
4) функция, обеспечивающая вывод двух массивов данных на график (с нормировкой значений):
void graf_2_norm( char *stroka, float *s1, float *s2, int n_begin, int n_end).
Данная функция аналогично функции graf_2 выводит на график два массива, однако нормировку производит для каждого массива свою. В итоге, если Вы выводите на график два массива, существенно различающихся по значениям, то каждый массив будет пронормирован к своим максимальному и минимальному значениям;
5) функция, обеспечивающая вывод трех массивов данных на график ( с нормировкой значений):
void graf_3_norm( char *stroka, float *s1, float *s2, float *s3, int n_begin, int n_end).
Данная функция, аналогично функции graf_3, выводит на график три массива, однако нормировку производит для каждого массива свою. В итоге, если Вы выводите на график три массива, существенно различающихся по значениям, то каждый массив будет пронормирован к своим максимальному и минимальному значениям;
6) следующая функция обеспечивает ввод с клавиатуры значения целочисленной переменной:
void input_int (char *stroka, int *perem).
Здесь stroka - массив, содержащий подпись для окна ввода,
рerem - адрес переменной, куда будет записано вводимое значение;
7) следующая функция обеспечивает ввод с клавиатуры значения вещественной переменной:
void input_float ( char *stroka, float *perem).
Здесь stroka - массив, содержащий подпись для окна ввода,
рerem - адрес переменной, куда будет записано вводимое значение;
8) для перехода в графический режим, в начале своей программы Вы должны поставить функцию, обеспечивающую инициализацию графики:
void Init_graph( void );
9) в конце программы необходимо использовать функцию, которая обеспечивает обратный переход в текстовый режим:
void Close_graph( void );
10) для получения случайных чисел, распределенных по гауссовскому закону, можно использовать функцию:
float gauss (float m_oz, float disp).
Здесь m_oz - математическое ожидание случайной величины, disp - дисперсия случайной величины.
Файл model.h содержит описание заголовков этих функций, кроме того в нем определена константа:
PI = 3.14159265 - число "пи".

[Титульная страница | Оглавление | Предыдущая страница | Следующая страница ]