Провести моделирование очереди в магазине с одним продавцом при пуассоновских законах распределения
попробовала сделать, что у меня не правильно
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls, jpeg;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Timer1: TTimer;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Image1: TImage;
Image2: TImage;
Label6: TLabel;
Timer2: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a,b,t,kol,za,k,i,l,j,ll,gdet,zanvr:Integer;
nach,vrem,kon,pokgdet,pok,x1,y1:Integer;
Buyx,Buyy:Integer;
obsl,prish:Integer;
tekvr,chas,minut:String;
pokin:array[1..1000] of real;
pokvr1:array[1..1000] of real;
pokvr:array[1..1000] of real;
prod:array[1..1000] of real;
ogid:array[1..1000] of real;
ob:array[1..1000] of real;
p,s,inte,buy,x,y,maxt,tt,vr:real;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Left:=Image1.Left-30;
If Image1.Left<112 Then
begin
Timer2.Enabled:=False;
Image1.Visible:=False;
Image1.Left:=208;
End;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
nach:=strtoint(form2.edit1.Text)*60;
inte:=strtofloat(form2.Edit3.Text);
kon:=strtoint(form2.edit2.Text)*60;
pok:=0; gdet:=1; k:=0; zanvr:=0; vrem:=0;
obsl:=0; i:=1; vr:=nach; gdet:=0; k:=1;
x1:=290; y1:=140;
maxt:=random(5); {максимальное время}
maxt:=(maxt+1)/100;
While vr<kon do
begin {интервал прихода покупателей}
pokin[i]:=random(7); {в соответствии с функцией Пуассона}
pokin[i]:=Int((1/inte)*((pokin[i]+1)/10))+1;
tt:=(inte*pokin[i])*(exp((-inte*pokin[i])*ln(2.71)));
If tt>maxt Then
begin
vr:=vr+pokin[i];
pokvr[i]:=vr; {время прихода пок-лей}
pokvr1[i]:=vr;
i:=i+1;
end;
end;
For l:=1 To i do
begin {время, кот. тратит продавец}
prod[l]:=random(8);
prod[l]:=Int((1/inte)*((prod[l]+1)/10))+1;
ob[l]:=0; ogid[l]:=0;
end;
i:=nach;
timer1.enabled:=true;
timer1.interval:=500;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
form1.Hide; form2.show;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Image1.Left:=Image1.Left-30;
If Image1.Left<112 Then
begin
Timer2.Enabled:=False;
Image1.Visible:=False;
Image1.Left:=208;
End;
end;
procedure TForm1.N1Click(Sender: TObject);
var stroka,stroka1:string;
begin
For i:=1 To obsl do
For i:=obsl+1 To l-1 do {суммируем время ожидания в оч-ди}
begin
ob[i]:=pokvr[i]-pokvr1[i]; s:=s+ob[i];
end;
s:=s/(l-1); {находим среднее арифметич-ое}
stroka1:=inttostr(gdet);
stroka:=inttostr(round(s));
showmessage('Среднее время ожидания в очереди покупателем равно '+stroka+' минут; простой продавца в ожидании прихода покупателей '+stroka1+' минут');
end;
end.