📄 linysh1.txt
字号:
程序说明:
drand()产生0~1之间的随机数
expon()产生负指数分布的随机数
maxtime,系统最大的服务时间
tr动态数组,存放顾客进入排队系统的时间。
tc动态数组,存放顾客离开的时间。
num用于统计服务的顾客数。
程序源代码 :
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <math.h>
#include <time.h>
using namespace std;
//using namespace std; 是 "用命名空间中的定义"。 std 是 空间 名,“标准”的意思。 现在一般推荐用 无 .h 的 头文件,写using ...
//#include <iostream> using namespace std; 相当于 #include <iostream.h>
void Init(); //自定义一个结束时没有返回值的函数
double drand(void) //产生均匀分布随机数
{
return (double)(
rand()<<15 | rand()
) /
(double)0x40000000;
}
//rand()<<15 | rand() 将拼成一个30bit的随机整数,取值0~3FFFFFFF,于是相除之后将得到大于等于0小于1的小数。
float Expon(float fl)
{
float v,u;
u=drand();
v=-fl*log(u);
return v;
}
int main()
{
double fr1,fr2,fr0,fc1,fc2,min;
cout<<"请输入 直接加入Queue1队的顾客的泊松过程的强度的参数 λ1";
cin>>fr1;
cout<<"请输入 直接加入Queue2队的顾客的泊松过程的强度的参数 λ2";
cin>>fr2;
cout<<"请输入 到达系统时顾客选择队列中人数较少的一队加入的泊松过程的强度的参数 λ0";
cin>>fr0;
cout<<"请输入 Queue1队服务员的服务所服从的指数分布的参数 μ1";
cin>>fc1;
cout<<"请输入 Queue2队服务员的服务所服从的指数分布的参数 μ2";
cin>>fc2;
cout<<"请输入 操作者希望看到的队列中正在等待的人数的最小值 min";
cin>>min;
srand( (unsigned)time( NULL ) ); //直接传入一个空指针,因为程序中并不需要经过参数获得的t数据。
vector<double>tr1,tr2,tr0,tc1,tc2; //定义tr1为直接加入Queue1队的顾客到达的时间;tr2为直接加入Queue2队的顾客到达的时间
//tr0为到达系统时选择队列中人数较少的一队加入的顾客到达的时间
//tc1为Queue1队服务的时间;tc2为Queue2队服务的时间
int num=0;
for(double t=0;t<=10000;) //10000是随机设置时间
{ //对应倒数第二个大括号
t=t+Expon(fr1); //产生直接加入Queue1队的顾客到达的时间
tr1.push_back(t); //在tr1队尾插入t
t=t+Expon(fr2); //产生直接加入Queue2队的顾客到达的时间
tr2.push_back(t);
t=t+Expon(fr0); //产生到达系统时选择队列中人数较少的一队加入的顾客到达的时间
tr0.push_back(t);
t=t+Expon(fc1); //产生Queue1队服务的时间
tc1.push_back(t);
t=t+Expon(fc2); //产生Queue2队服务的时间
tc2.push_back(t);
num++;
//记录入队的人数
int nr1=0,nr2=0,long1,long2;
for(double t=0;t<=10000;) //10000是随机设置时间
{
if(t=tr1)
{nr1++;}
else if(t=tr2)
{nr2++;}
else if(t=tr0)
{
if(long1<=long2)
{nr1++;}
else nr2++;
}
//计算队长
int long1=0,n1=0;
for(int s=0;s<num;s++)
{
for(int i=0;i<num;i++)
{
if(tc1[i]>tr1[s])
break;
}
n1=nr1-i;
}
long1=n1; //产生Queue1的队长
int long2=0,n2=0;
for(int s=0;s<num;s++)
{
for(int i=0;i<num;i++)
{
if(tc2[i]>tr2[s])
break;
}
n2=nr2-i;
}
long2=n2; //产生Queue2的队长
//计算概率
int x=0,p[a];
if(a=long1)
{
x++;
p[a]=x/num;
}
int y=0,q[b];
if(b=long2)
{
y++;
q[b]=y/num;
}
//计算要输出的数据
int queue1[10]
if(a=min)
{
queue1[1]=p[a];
queue1[2]=p[a+1];
queue1[3]=p[a+2];
queue1[4]=p[a+3];
queue1[5]=p[a+4];
queue1[6]=p[a+5];
queue1[7]=p[a+6];
queue1[8]=p[a+7];
queue1[9]=p[a+8];
queue1[10]=p[a+9];
}
int queue2[10]
if(b=min)
{
queue2[1]=p[b];
queue2[2]=p[b+1];
queue2[3]=p[b+2];
queue2[4]=p[b+3];
queue2[5]=p[b+4];
queue2[6]=p[b+5];
queue2[7]=p[b+6];
queue2[8]=p[b+7];
queue2[9]=p[b+8];
queue2[10]=p[b+9];
}
//输出数据
cout<<"Totle的值为:"<<num<<endl;
cout<<"某顾客到达时,Queue1中有"<<min<<"个顾客在等待的概率为:"<<queue[1]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+1<<"个顾客在等待的概率为:"<<queue[2]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+2<<"个顾客在等待的概率为:"<<queue[3]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+3<<"个顾客在等待的概率为:"<<queue[4]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+4<<"个顾客在等待的概率为:"<<queue[5]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+5<<"个顾客在等待的概率为:"<<queue[6]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+6<<"个顾客在等待的概率为:"<<queue[7]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+7<<"个顾客在等待的概率为:"<<queue[8]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+8<<"个顾客在等待的概率为:"<<queue[9]<<endl;
cout<<"某顾客到达时,Queue1中有"<<min+9<<"个顾客在等待的概率为:"<<queue[10]<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -