📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Panel3: TPanel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label10: TLabel;
Label9: TLabel;
Edit9: TEdit;
pgMain: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label7: TLabel;
Label6: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Label5: TLabel;
Edit6: TEdit;
Label11: TLabel;
Edit7: TEdit;
Label8: TLabel;
Edit8: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Edit10: TEdit;
Edit11: TEdit;
Label15: TLabel;
Label16: TLabel;
Edit12: TEdit;
Edit13: TEdit;
Label17: TLabel;
GroupBox1: TGroupBox;
Label19: TLabel;
CB1: TComboBox;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure CB1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses math;
{$R *.dfm}
function jiecheng(n:integer):integer; //阶乘函数
var i,s:integer ;
begin
s:=1;
for i:=1 to n do
s:=s*i;
result:=s;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var m,n,x,u,i,j:integer;
S,S1,S2,qp,P0,Pmang,Adan,Aduo,K,K1,K2,Wdan,Wduo,Lq,Psun:real;
begin
if (edit1.Text='') or (edit2.Text='')or (edit3.Text='') or (edit9.Text='') then
begin
showmessage('请输入完整数据!');
exit;
end;
m:=strtoint(edit1.text);
n:=strtoint(edit2.text);
x:=strtoint(edit3.text);
u:=strtoint(edit9.text);
qp:=x/u ;
S1:=0; S2:=0;
for i:=1 to m do
S1:=S1+ jiecheng(n)*power(qp,i)/(jiecheng(n-i)*jiecheng(i));
for j:=m+1 to n do
S2:=S2+ jiecheng(n)*power(qp,j)/(jiecheng(n-j)*jiecheng(m)*power(m,j-m));
S:=1+S1+S2;
P0:=1/S; //系统空闲概率
if cb1.ItemIndex=0 then //单通道系统
begin
Pmang:=1-P0; //维护队忙的概率
Adan:=(1-P0)*u; //系统的绝对通过能力
Wdan:=n-(1-P0)/qp; //损坏道路的平均数
Lq:=n-(1-P0)*(1+1/qp); //排队等待抢修的道路平均数
Psun:=Wdan/n; //系统的损失率
edit4.Text:=formatfloat('0.000',Pmang);
edit5.Text:=formatfloat('0.000',Adan);
edit6.Text:=formatfloat('0.000',Wdan);
edit7.Text:=formatfloat('0.000',Lq);
edit8.Text:=formatfloat('0.000',Psun);
end
else //多通道系统
begin
K1:=0; K2:=0;
for i:=0 to m-1 do
K1:=K1+i*jiecheng(n)*power(qp,i)*P0/(jiecheng(n-i));
for i:=1 to m-1 do
K2:=K2+m*(1-P0-jiecheng(n)*power(qp,i)*P0/(jiecheng(n-i)));
K:=K1+K2; //占用维护分队的平均数
Aduo:=K*u; //系统的绝对通过能力
Wduo:=n-Aduo/x; //损坏道路的平均数
edit10.Text:=formatfloat('0.000',P0);
edit11.Text:=formatfloat('0.000',K);
edit12.Text:=formatfloat('0.000',Aduo);
edit13.Text:=formatfloat('0.000',Wduo);
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:= 0 to pgMain.PageCount - 1 do
pgMain.Pages[I].TabVisible := False;
pgmain.ActivePageIndex:=cb1.ItemIndex;
edit1.Text:='1';
edit1.Enabled:=false;
label2.Enabled:=false;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
close;
end;
procedure TForm1.CB1Change(Sender: TObject);
begin
edit1.Text:='';edit2.Text:='';edit3.Text:='';
edit9.Text:='';edit4.Text:='';edit5.Text:='';
edit6.Text:='';edit7.Text:='';edit8.Text:='';
edit10.Text:='';edit11.Text:='';edit12.Text:='';
edit13.Text:='';
pgmain.ActivePageIndex:=cb1.ItemIndex;
if cb1.ItemIndex=0 then
begin
edit1.Text:='1';
edit1.Enabled:=false;
label2.Enabled:=false;
end
else
begin
edit1.Text:='';
edit1.Enabled:=true;
label2.Enabled:=true;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -