Сборник задач и упражнений по курсу "Моделирование" (Мультипликативный конгруэнтный генератор с простым модулем), страница 3

x[i]:= Chislo(); {Вычисляем псевдослучайное число}

if (i>1) and (flag = false) then

if x[i]=x[1] then

begin

T:=i-1;        {Вычисляем период генератора}

flag:=true;

end;

sum:=sum+x[i]; {Вычисляем сумму массива псевдослучайных чисел}

end;

if flag=false then T:=N;

Period.Caption:='Период генератора:   '+ inttostr(T);

m:=sum/N;  {Вычисляем математическое ожидание}

m_o.Caption:='Математическое ожидание:   '+ floattostrf(m, ffFixed, 8,5);

s:=0;

for i:= 1 to N do

s:=s+sqr(x[i]-m)*(1/N); {Вычисляем дисперсию}

dispersiya.Caption:='Дисперсия:   ' + floattostrf(s, ffFixed, 8, 5);

end;

{Процедура построения гистограммы распределения псевдослучайных чисел}

procedure TForm1.Button1Click(Sender: TObject);

var

i,j:integer;

begin

for i:= 1 to 11 do y[i]:=0;

Raspredelenie(Sender);

for i:=1 to N do

{Подсчитываем количество чисел, попавших в каждый из 10 равных отрезков, на которые разбит интервал [5;30]}

case round(x[i]*1000) of

5001..7500   : y[1]:=y[1]+1;

7501..10000  : y[2]:=y[2]+1;

10001..12500 : y[3]:=y[3]+1;

12501..15000 : y[4]:=y[4]+1;

15001..17500 : y[5]:=y[5]+1;

17501..20000 : y[6]:=y[6]+1;

20001..22500 : y[7]:=y[7]+1;

22501..25000 : y[8]:=y[8]+1;

25001..27500 : y[9]:=y[9]+1;

27501..30000 : y[10]:=y[10]+1;

end;

if f  then

begin                  {Строим гистограмму распределения}

for j:= 0 to 13 do

case j of

0..1  : Chart1.SeriesList[0].AddXY(2.5*j,0);

2..12 : Chart1.SeriesList[0].AddXY(2.5*(j-1)+2.5,y[j-1]);

13    : Chart1.SeriesList[0].AddXY(2.5*(j-1)+2.5,0);

end;

f:=false;

end

else

for j:=2 to 12 do

Chart1.SeriesList[0].YValue[j]:=y[j-1];

Button1.Enabled:=false;

Button3.Enabled:=true;

end;

{Процедура просмотра массива псевдослучайных чисел}

procedure TForm1.Button3Click(Sender: TObject);

var

i : integer;

begin

if not FLAG then

begin

Form2.Memo1.Clear;

Form1.Button3.Cursor:=crHourGlass;

Raspredelenie(Sender);

for i:= 1 to N do

begin

Form2.Memo1.Lines.Add('   ' + floattostrf(x[i],ffFixed,8,5));

end;

Form1.Button3.Cursor:=crDefault;

FLAG:=true;

end;

Form2.ShowModal;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

Form3.ShowModal; {Показ окна настройки параметров генератора}

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;        {Выход из программы}

end;

end.

unit Unit3;

interface

uses

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

Dialogs, StdCtrls, ComCtrls, Unit1;

type

TForm3 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

UpDown1: TUpDown;

UpDown2: TUpDown;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

Label4: TLabel;

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Edit1Change(Sender: TObject);

begin

z:= strtoint(Edit1.Text);

FLAG:=false;

Form1.Button1.Enabled:=true;

end;

procedure TForm3.Edit2Change(Sender: TObject);

begin

k:=strtoint(Edit1.Text);

FLAG:=false;

Form1.Button1.Enabled:=true;

end;

procedure TForm3.ComboBox1Change(Sender: TObject);

begin

b:=strtoint(Edit1.Text);

FLAG:=false;

Form1.Button1.Enabled:=true;

end;

procedure TForm3.ComboBox2Change(Sender: TObject);

begin

c:=strtoint(Combobox2.Text);

FLAG:=false;

Form1.Button1.Enabled:=true;

end;

end.

Ромб: i<=1

 


                                                 ДА                                                      НЕТ

 


Рис. 1.1. Блок-схема алгоритма