Приложение. Исходный код программы.




unit Unit1;

 

interface

 

uses

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

Dialogs, XPMan, StdCtrls, Grids;

 

type

TForm1 = class(TForm)

EditSKO: TEdit;

EditMinVyr: TEdit;

EditMaxVyr: TEdit;

EditCountRandom: TEdit;

EditPoint1: TEdit;

EditPoint2: TEdit;

EditPoint3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

ButtonStart: TButton;

ButtonClear: TButton;

ButtonExit: TButton;

XPManifest1: TXPManifest;

Label9: TLabel;

StringGrid1: TStringGrid;

Label10: TLabel;

procedure ButtonExitClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ButtonStartClick(Sender: TObject);

procedure ButtonClearClick(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

T:array [1..3,1..3] of integer;

U:array [1..3] of integer;

P:array [1..3] of real;

Tsum:array [1..3] of Double;

Tsum2:array [1..3] of Double;

Mcp:array [1..3] of real;

Gar:array [1..3] of real;

Sigma:array [1..3] of real;

j, Nr:integer;

R,z, sigm, Eta, Ts,Tmax,Tmin:real;

implementation

 

{$R *.dfm}

 

procedure TForm1.ButtonExitClick(Sender: TObject);

begin

close();

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

// Изменяем ширину столбцов

StringGrid1.ColWidths[0]:=40;

StringGrid1.ColWidths[1]:=110;

StringGrid1.ColWidths[2]:=110;

StringGrid1.ColWidths[3]:=110;

StringGrid1.ColWidths[4]:=160;

StringGrid1.ColWidths[5]:=160;

 

R:=StrToFloat('1,645');

 

// Вносим значения в таблицу

StringGrid1.Cells[0,0]:=' №';

StringGrid1.Cells[1,0]:=' Товар 1';

StringGrid1.Cells[2,0]:=' Товар 2';

StringGrid1.Cells[3,0]:=' Товар 3';

StringGrid1.Cells[4,0]:=' Средний убыток';

StringGrid1.Cells[5,0]:=' Вероятность убытка';

StringGrid1.Cells[0,1]:=' 1';

StringGrid1.Cells[0,2]:=' 2';

StringGrid1.Cells[0,3]:=' 3';

 

StringGrid1.Cells[1,1]:='3000';

StringGrid1.Cells[1,2]:='3000';

StringGrid1.Cells[1,3]:='3000';

 

StringGrid1.Cells[2,1]:='3000';

StringGrid1.Cells[2,2]:='3000';

StringGrid1.Cells[2,3]:='3000';

 

StringGrid1.Cells[3,1]:='3000';

StringGrid1.Cells[3,2]:='3000';

StringGrid1.Cells[3,3]:='3000';

 

StringGrid1.Cells[4,1]:='3000';

StringGrid1.Cells[4,2]:='3000';

StringGrid1.Cells[4,3]:='3000';

 

StringGrid1.Cells[5,1]:='0,1';

StringGrid1.Cells[5,2]:='0,5';

StringGrid1.Cells[5,3]:='0,9';

 

// заносим значения в текстовые поля

EditSKO.Text:='0,25';

EditMinVyr.Text:='-1';

EditMaxVyr.Text:='2';

EditCountRandom.Text:='5000';

end;

 

Function UNR():real;

var k:integer;

e:real;

begin

// Функция "Усеченное нормальное распределение"

Repeat

e:=0;

For k:= 1 to 12 do begin

z:= Random;

e:=e+z;

end;

e:=e-6;

until (e>=Tmin) And (e<=Tmax);

 

UNR:=e;

end;

 

procedure TForm1.ButtonStartClick(Sender: TObject);

var a:string;

i, Ir:integer;

Disp:real;

begin

 

// Считаваем значения из таблицы в массив T

t[1,1]:=strtoint(StringGrid1.Cells[1,1]);

t[1,2]:=strtoint(StringGrid1.Cells[1,2]);

t[1,3]:=strtoint(StringGrid1.Cells[1,3]);

 

t[2,1]:=strtoint(StringGrid1.Cells[2,1]);

t[2,2]:=strtoint(StringGrid1.Cells[2,2]);

t[2,3]:=strtoint(StringGrid1.Cells[2,3]);

 

t[3,1]:=strtoint(StringGrid1.Cells[3,1]);

t[3,2]:=strtoint(StringGrid1.Cells[3,2]);

t[3,3]:=strtoint(StringGrid1.Cells[3,3]);

 

//Считываем значния в массив U

u[1]:=strtoint(StringGrid1.Cells[4,1]);

u[2]:=strtoint(StringGrid1.Cells[4,2]);

u[3]:=strtoint(StringGrid1.Cells[4,3]);

 

// Проверка на наличие точки, вместо запятой

a:=StringGrid1.Cells[5,1];

if a[2]='.' then a[2]:=',';

StringGrid1.Cells[5,1]:=a;

 

a:=StringGrid1.Cells[5,2];

if a[2]='.' then a[2]:=',';

StringGrid1.Cells[5,2]:=a;

 

a:=StringGrid1.Cells[5,3];

if a[2]='.' then a[2]:=',';

StringGrid1.Cells[5,3]:=a;

 

//Считываем значния в массив U

P[1]:=StrToFloat(StringGrid1.Cells[5,1]);

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

P[3]:=StrToFloat(StringGrid1.Cells[5,3]);

 

// Проверка точки в поле СКО

a:=EditSKO.Text;

If a[2]='.' then a[2]:=',';

EditSKO.Text:=a;

 

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

sigm:=StrToFloat(EditSKO.Text);

Tmin:=StrToInt(EditMinVyr.Text);

Tmax:=StrToInt(EditMaxVyr.Text);

Nr:=StrToInt(EditCountRandom.Text);

 

// Обнуление сумм, для расчёта МО и СКО

For i:=1 to 3 do begin

Tsum[i]:=0;

Tsum2[i]:=0;

end;

For Ir:=1 to Nr do //перебор случайных реализаций

For i:=1 to 3 do begin

TS:=0;

Eta:=UNR();

TS:= T[i,1]*(1+Sigm*Eta);

Eta:=UNR();

TS:= TS + T[i,2]*(1+Sigm*Eta);

Eta:=UNR();

TS:= TS + T[i,3]*(1+Sigm*Eta);

z:=Random;

If z<P[i] Then begin

Eta:= UNR;

TS:=TS-U[i]*(1+Sigm*Eta);

end;

Tsum[i]:=Tsum[i]+TS;

Tsum2[i]:=Tsum2[i] + TS*TS;

end;

 

For i:=1 to 3 do begin

Mcp[i]:= Tsum[i]/Nr; // Расчёт средней прибыли

If Nr >i Then begin

Disp:=(Tsum2[i] - Nr*Mcp[i]*Mcp[i])/(Nr - 1);

Sigma[i]:= Sqrt(Disp);

end

Else

Sigma[i]:= 0;

// минимальная гарантированная прибыль:

Gar[i]:=Mcp[i]-R*Sigma[i];

end;

 

// Вывод результатов в ячейки

EditPoint1.Text:=FloatToStr(Gar[1]);

EditPoint2.Text:=FloatToStr(Gar[2]);

EditPoint3.Text:=FloatToStr(Gar[3]);

 

 

end;

 

procedure TForm1.ButtonClearClick(Sender: TObject);

begin

EditPoint1.Text:='';

EditPoint2.Text:='';

EditPoint3.Text:='';

end;

 

end.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: