Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИМЭП.doc
Скачиваний:
31
Добавлен:
02.04.2015
Размер:
543 Кб
Скачать

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

Алгоритм имитационного моделирования случайных факторов в форме дискретных случайных величин, описанный в п. 5 на основе алгоритма из п. 4, реализован в среде программирования Borland Delphi 7. Windows-окно формы программы представлено на рис. 6. Код программы приведен ниже.

unit Unit1; {ИМ дискретных случайных величин}

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

Label1: TLabel;{Количество возможных значений}

Edit1: TEdit;{Количество возможных значений}

Label2: TLabel;{Табличное задание случайной величины}

StringGrid1: TStringGrid;{Табличное задание случ. величины}

Label3: TLabel;{Точки разбиения единичного отрезка}

StringGrid2: TStringGrid;{Точки разбиения единичного отрезка}

Button1: TButton;{Реализация}

Label4: TLabel;{ДСЧ}

Edit2: TEdit;{ДСЧ}

Label5: TLabel;{Значение реализации случайной величины}

Edit3: TEdit;{Значение реализации случайной величины}

procedure Edit1Change(Sender: TObject);

procedure StringGrid1Exit(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const Max=1000;{Максимальное значение индекса массива}

var

X:array[1..Max] of extended;{Массив возможных значений}

P:array[1..Max] of extended;{Массив вер. реализ. заданных знач.}

L:array[1..Max] of extended;{Массив точек разбиен. един. отрезка}

z:extended;{Реализация ДСЧ}

n:cardinal;{Количество возможных значений}

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);

var i:cardinal;

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

n:=StrToInt(Edit1.Text);{Ввод кол-ва возможных знач. случ. вел.}

StringGrid1.RowCount:=n+1; StringGrid2.RowCount:=n+1;

StringGrid1.Cells[0,0]:='Номер';

StringGrid1.Cells[1,0]:='Значение';

StringGrid1.Cells[2,0]:='Вероятность';

StringGrid2.Cells[0,0]:='Номер';

StringGrid2.Cells[1,0]:='Точка разбиения';

for i:=1 to n do

begin

StringGrid1.Cells[0,i]:=IntToStr(i);

StringGrid2.Cells[0,i]:=IntToStr(i);

end;

end;

procedure TForm1.StringGrid1Exit(Sender: TObject);

var i,j:cardinal;

begin{Определение точек разбиения единичного отрезка}

for i:=1 to n do

begin

P[i]:=StrToFloat(StringGrid1.Cells[2,i]);

L[i]:=0; for j:=1 to i do L[i]:=L[i]+P[j];

StringGrid2.Cells[1,i]:=FloatToStr(L[i]);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i:cardinal;

begin{Определение реализации случайной величины}

randomize; z:=random;

Edit2.Text:=FloatToStr(z);{Вывод реализации ДСЧ}

for i:=1 to n do

begin

if z<L[i] then

begin

Edit3.Text:=StringGrid1.Cells[1,i];{Вывод знач. реал. случ. вел.}

break;

end;

end;

end;

end.

Рис. 6. Windows-окно формы программы имитационного моделирования случайных факторов в форме дискретных случайных величин