unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Math;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Label5: TLabel;
Edit4: TEdit;
Label6: TLabel;
Edit5: TEdit;
Label7: TLabel;
Label8: TLabel;
Edit6: TEdit;
Label9: TLabel;
Edit7: TEdit;
Label10: TLabel;
Edit8: TEdit;
Label11: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
K,p,i,io,n,m:integer;ro,Potk,Pbo,tz,bTz,tobsl,Tzvezda:real;
landa,Toc,T,Tk,Mi,R,Trazg:real;
Tin: array [0..300] of real;
Tout: array [0..300] of real;
begin
Landa:=Strtofloat(edit1.Text);//интенсивность автомобилей в час
Trazg:=Strtofloat(Edit2.Text)/60;//среднее время
Mi:=1/Trazg;
Tk:=24;//часов в сутки
P:=Strtoint(Edit3.Text);//емкость накопителя
ro:= Landa/ Mi;
T := 0;
Tzvezda := 0;
K := 0;
n := 0; // обслужено
m := 0; // отказано
Pbo:=0;
i:=0;
io:=0;
Randomize;
R:=random;
tz := (1/Landa)*Ln(R);
bTz:=T+tz;
while T < Tk do
begin
if Tzvezda > bTz then
begin
T := bTz;
K := K+1;
if p+1 >= K then
begin
Tin[i]:=T;
i:=i+1;
// i:=i-1;
n := n+1;
if K=1 then
begin
Pbo:= Pbo+1;
end;
end
else
begin
K := K-1;
m := m+1;
end;
if K > 0 then
begin
R:=random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
end;
R:=Random;
tz := -(1/Landa)*ln(R);
bTz := bTz+tz;
end
else
begin
T := Tzvezda;
if K > 0 then
begin
Tout[io]:=T;
io:=io+1;
K := K-1;
end;
if K = 0 then
begin
Tzvezda := Tk;
end
else
begin
R:=Random;
tobsl := -(1/Mi)*Ln(R);
Tzvezda := T+Tobsl;
end;
end;
end;
//вычисление характеристик
n:=n-K;
Toc:=0;
for i:= 0 to io-1 do
begin
Toc:=Toc+Tout[i]-Tin[i];
end;
Toc:=Toc/io;
// клиентов прибыло
Edit4.Text:=inttostr(n+m);
//количество отказов
Edit5.Text:=inttostr(m);
// n-m количество обслуженных машин
//вероятность отказа
Potk:=m/(n+m);
Edit6.Text:=floattostr(Potk);
// вероятность что будет обслужена без очереди
Pbo := Pbo/(n+m);
Edit7.Text:=floattostr(Pbo);
// время ожидания
Edit8.Text:=floattostr(Toc);
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.