Создание и проверка датчика случайных чисел

Автор: Пользователь скрыл имя, 15 Мая 2013 в 22:40, лабораторная работа

Краткое описание

Цель: Знакомство с генераторами случайных чисел, создание алгоритмического (программного) датчика квазислучайных чисел, проверка качества датчика.
Программное обеспечение: операционная система Windows, Pascal.
Постановка задачи: Создать алгоритмический датчик случайных чисел, используя один из приведенных выше алгоритмов либо какой-либо другой. Вывести последовательность квазислучайных чисел. Провести проверку последовательности чисел на равномерность, независимость и стохастичность. Построить функцию плотности распределения случайных чисел в виде гистограммы. Подготовить ответы на контрольные вопросы. Защитить лабораторную работу.

Файлы: 1 файл

лаб2.doc

— 155.00 Кб (Скачать)

Федеральное агентство  образования и науки РФ

Чайковский филиал

государственного образовательного учреждения

высшего профессионального  образования

«Пермский государственный  технический университет»

Кафедра информационных технологий

 

 

 

 

 

 

 

 

 

 

 

 

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

Дисциплина: Моделирование систем

Тема: «Создание и проверка датчика случайных чисел»

 

 

 

 

 

Выполнил:

Проверил:

преподаватель

Лабутина Т.В.

 

 

 

 

 

 

 

 

 

 

 

2006г.

 

Цель: Знакомство с генераторами случайных чисел, создание алгоритмического (программного)  датчика квазислучайных чисел, проверка качества датчика.

Программное обеспечение: операционная система Windows, Pascal.

Постановка задачи: Создать алгоритмический датчик случайных чисел, используя один из приведенных выше алгоритмов либо какой-либо другой. Вывести последовательность квазислучайных чисел. Провести проверку последовательности чисел на равномерность, независимость и стохастичность.  Построить функцию плотности распределения случайных чисел в виде гистограммы.  Подготовить ответы на контрольные вопросы.  Защитить лабораторную работу.

 

 

Ход работы:

Программа:

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Grids, ValEdit, Buttons,Math, TeEngine, Series,

  ExtCtrls, TeeProcs, Chart;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Edit3: TEdit;

    Edit4: TEdit;

    Edit5: TEdit;

    Edit6: TEdit;

    Label8: TLabel;

    Edit7: TEdit;

    Label9: TLabel;

    Label10: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    Label13: TLabel;

    Label14: TLabel;

    Edit8: TEdit;

    Edit9: TEdit;

    Edit10: TEdit;

    Edit11: TEdit;

    Edit12: TEdit;

    Button1: TButton;

    BitBtn1: TBitBtn;

    ListBox1: TListBox;

    Chart1: TChart;

    Series1: TBarSeries;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  L,x1,t,g,x0,x:integer;

  sum,disp,z,p,kor,r1,r2,e:real;

  m:array[0..199] of real;

  pl,f:array[1..10] of integer;

  str:string;

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var i,n,nn,mm,k,j,sumpi:integer;

begin

series1.Clear;

Listbox1.Items.Clear;

nn:=0;mm:=0;sum:=0;disp:=0;kor:=0;randomize;

x0:=strtoint(edit1.Text);t:=strtoint(edit2.Text);sumpi:=0;

if strtoint(Edit1.Text)mod 2 =0 then MessageDlg('Число Xo должнобыть нечетным',mtError,[mbOk],0);

L:=8*t-3; g:=8;n:=199;r1:=0.1;r2:=0;e:=0;

     for i:=0 to n do

       begin

        x:=x0*L;

        x1:=lo(x);

        m[i]:=x0/Power(2,g);

        x0:=x1;Listbox1.Items.Add(floattostr(m[i]));

       end;

     for i:=0 to n do

       begin

        sum:=sum+m[i];f[i]:=0;

        disp:=disp+power((m[i]-0.5),2);

        e:=e+power(m[i],2);

        z:=Power(m[i],2)+Power(m[i+1],2);

        if z<1 then inc(nn) else inc(mm);

        kor:=kor+((m[i]-0.5)*(m[i+1]-0.5));

        str:=str+copy(floattostr(m[i+1]),3,11);

        if i<10 then pl[i]:=0;

       end;

i:=0; While i < n do

       begin  k:=0;

        if str[i]=str[i+1] then

             while str[i]=str[i+1] do

                begin inc(k);inc(i);end

        else inc(pl[1]);

        case k of

         1:inc(pl[2]);

         2:inc(pl[3]);

         3:inc(pl[4]);

         4:inc(pl[5]);

        end; inc(i);

       end;

for i:=0 to 4 do

   sumpi:=sumpi+pl[i];

 For j:=1 to 10 do

   begin

    for i:=0 to n do

    if (m[i]<r1) and (m[i]>r2) then f[j]:=f[j]+1;

    r1:=r1+0.1;r2:=r2+0.1;

            series1.Add((f[j]/200),'',random(10000000));

            chart1.LeftAxis.Increment:=0.1;

    end;

edit3.Text:=floattostr((1/n)*sum);

edit4.Text:=floattostr((1/n)*disp);

edit5.Text:=floattostr(e/n);

edit6.Text:=floattostr(nn/(nn+mm));

edit7.Text:=floattostr(((1/n)*kor));

edit8.Text:=floattostr(pl[1]/sumpi);

edit9.Text:=floattostr(pl[2]/sumpi);

edit10.Text:=floattostr(pl[3]/sumpi);

edit11.Text:=floattostr(pl[4]/sumpi);

edit12.Text:=floattostr(pl[5]/sumpi);

 

end;

 

 

end.

 

Результаты работы программы:

 

 

Выход: в результате выполнения данной лабораторной работы, используя мультипликативный алгоритм, был создан датчик случайных чисел. Была проведена проверка полученной последовательности чисел на равномерность, стохастичность. А также построена функция плотности распределения случайных чисел в виде гистограммы.


Информация о работе Создание и проверка датчика случайных чисел