Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Лабораторна робота № 2. Дисципліна „Моделювання складних систем ”






 

Дисципліна „Моделювання складних систем ”

Тема «Датчики псевдовипадкових чисел»

 

Виконав:

Ст. гр. КІ-16-С

Резенко М.С.

Дата: 19.09.2016

 

Підпис: ________________

 

 

Перевірив:

Доцент Петренюк В.І.

 

Дата: ­­______________

 

Підпис: ______________

 

 

Кропивницький – 2016 р.

Завдання: Скласти програму датчика псевдовипадкових чисел за однією з відомих формул і протестувати програму. Зробити висновок про її якість.

 

Xn+1 = (a*Xn +c) mod m, де X0 > =0, m> X0, m> a, m> c.

Така послiдовнiсть зветься лiнiйною конгруентною. Перiодом такої послiдовностi буде m тодi i тiльки тодi, коли виконується умова:

1. с та m - взаємно простi числа.

2. a-1 кратне p для довiльного p, що є дiльником m.

3. a-1 кратне 4, якщо m кратне 4.

Статистика (тестування):

k

V = 1/n (Σ ((Y2 /Ps) - n))

s=1 s

 

#include < vcl.h>

#pragma hdrstop

#include " Unit1.h"

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm1 *Form1;

unsigned __int64 x0;

//---------------------------------------------------------------------------

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------

// програма датчика псевдо випадкових чисел

int __fastcall TForm1:: Progr_rand(int n)

{

unsigned __int64 m = 9576890767, a = 1500450271, xn;

int c = 7;

xn = (a*x0 + c)%m;

x0 = xn;

return x0%n;

}

//---------------------------------------------------------------------------

// тестування

void __fastcall TForm1:: Button1Click(TObject *Sender)

{

int pos=1;

long dosl, p, k;

ProgressBar1-> Min = 1;

ProgressBar1-> Max = 27;

long kilk_dosl, i, chastota[11]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

int ind;

randomize();

double E_i, V=0;

double ogid[]={0.02777777777777777777777777778,

0.05555555555555555555555555556,

0.08333333333333333333333333333,

0.11111111111111111111111111111,

0.13888888888888888888888888889,

0.16666666666666666666666666667,

0.13888888888888888888888888889,

0.11111111111111111111111111111,

0.08333333333333333333333333333,

0.05555555555555555555555555556,

0.02777777777777777777777777778};

kilk_dosl = Edit1-> Text.ToInt(); //кількість дослідів

p = (kilk_dosl/ProgressBar1-> Max)-(kilk_dosl%ProgressBar1-> Max);

k = p;

x0 = GetTickCount();

for(i=0; i< kilk_dosl; i++)

{

// якщо білдер

if(RadioButton1-> Checked)

{

ind=random(5);

ind=ind+random(5);

}

// якщо моєю програмою

else

{

ind = Progr_rand(5);

ind = ind + Progr_rand(5);

}

chastota[ind]++;

//---------------------------------------

if(i==p){

ProgressBar1-> Position = pos;

pos++;

p+=k;

}

//---------------------------------------

}

//по частоті обчислюємо V

for(i=0; i< 11; i++)

{

E_i = kilk_dosl*ogid[i];

V+=((chastota[i]-E_i)*(chastota[i]-E_i))/E_i;

}

Edit2-> Text = V; // виводимо на екран

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: RadioButton1Click(TObject *Sender)

{

RadioButton2-> Checked = false;

}

//---------------------------------------------------------------------------

Рисунок 1.1 – Дослід 1 за допомогою програми

 

Рисунок 1.2 – Дослід за допомогою builder


Міністерство освіти і науки України

Кропивницький національний технічний університет

Кафедра програмування та захисту інформації

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал