Задание:
Банк имеет один пункт, где клиенты обслуживаются банковским автоматом не выходя из автомобиля. Автомобили пребывают в среднем с интенсивностью 12 автомобилей в час. Среднее время, необходимое для обслуживания клиента банкоматом, равно 6 мин. Максимальная вместимость полосы обслуживания банкоматом составляет 10 автомобилей. При заполненной полосе прибывающие клиенты должны искать обслуживание в другом банке. Определить следующие величины:
- количество прибывших автомобилей, количество клиентов, получивших отказ;
- вероятность того, что прибывающий клиент не сможет воспользоваться услугами банковского автомата;
- вероятность того, что прибывающий клиент обслуживается без ожидания;
- среднее время ожидания клиента в очереди.
Смоделировать работу банкомата в течение суток
Исходный код программы для Delphi 7:
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:=12;//часов в сутки
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
n := n+1;
end
else
begin
m := m+1;
k := k-1;
end;
if K = 1 then
begin
R := random;
tobsl := -(1/Mi)*ln(R);
Tzvezda := bTz+tobsl;
Pbo:=Pbo+1;
end
else
begin
Tin[i] := T;
i := i+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
K := K-1;
end;
if K = 0 then begin
Tzvezda := Tk;
end else
begin
Tout[io]:=T;
io:=io+1;
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/(Pbo+io);
//Pbo:=1-Potk;
Edit7.Text:=floattostr(Pbo);
// время ожидания
Edit8.Text:=floattostr(Toc);
end;
end.
Блок схема:
|