📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include "vcl.h"
#include "stdio.h"
#include "stdlib.h"
#define LBDA 0.05 //飞机到达强度
#define LBDD 0.15 //飞机离去强度
#define MAXP 70 //准备起飞飞机最大队长
#define MAXT 10000 //最大模拟时间
#define TW 5 //飞机起飞降落的时间
typedef struct{
unsigned num; //飞机编号
unsigned do_time; //飞机行为时间
unsigned mode; //0,机场可起降,1有降落飞机,2有起飞飞机 其他:错误
}tplane;
void ini_linep(tplane li[MAXP+1]); //初始飞机队列
void toline(tplane li[MAXP+1],long ct,unsigned nb,unsigned md);//飞机排入队尾
tplane outline(tplane li[MAXP+1],long ct);//li中队收首飞机出列,进入跑道
float ran(void);//伪随机数
void testl(tplane li[MAXP+1]);//测试函数
long minabc(long a,long b,long c);//abc三个数中取值最小者
main(int argc, char* argv[])
{tplane planea[MAXP+1],planed[MAXP+1],runaway,pt;
long clock;
float u1,u2;
unsigned ka=0,kd=0;
randomize();
ini_linep(planea);
ini_linep(planed);
clock=1;
runaway.num=0;runaway.do_time=0;runaway.mode=0;
while(clock<=MAXT){
u1=ran();u2=ran();
if(u1<LBDA){
ka++;
pt.num=2*ka-1;
pt.do_time=clock;
pt.mode=1;
toline(planea,clock,pt.num,pt.mode);
}//处理飞机到达事务
if(u2<LBDD){
kd++;
pt.num=2*kd;
pt.do_time=clock;
pt.mode=2;
toline(planed,clock,pt.num,pt.mode);
}//处理飞机起飞事务
rightaway:if(runaway.mode==0){
if(planea[1].num!=0){
runaway=outline(planea,clock);
printf("第%d架飞机降落时刻为%d<-\n",runaway.num,clock);
runaway.do_time=clock+TW;
}
else if(planed[1].num!=0){
runaway=outline(planed,clock);
printf("第%d架飞机起飞时刻为%d->\n",runaway.num,clock);
runaway.do_time=clock+TW;
}
}
else if(runaway.do_time==clock){
runaway.mode=0;runaway.num=0;runaway.do_time=0;goto rightaway;
}
clock++;
}
printf("空中\n");testl(planea);
printf("停机场\n");testl(planed);
//printf("min%d",minabc(112,114,116)) ;
getchar();
}
float ran(void)//伪随机数
{float r;
r=rand()%32767+1;
r=r/32768;
return(r);
}
void ini_linep(tplane li[MAXP+1])//初始降落分级队列
{unsigned i;
for(i=1;i<=MAXP;i++){li[i].num=0;li[i].do_time=0;li[i].do_time=0;}
}
void toline(tplane li[MAXP+1],long ct,unsigned nb,unsigned md)
{unsigned j;
j=0;
while(1){
j++;
if(j>MAXP){printf("too long line");exit(0);}
if(li[j].num==0){
li[j].num=nb;li[j].do_time=ct; li[j].mode=md;
printf("第%d客户进入队列的时刻%d\n",li[j].num,ct);
break;
}
}
}
tplane outline(tplane li[MAXP+1],long ct)//li中队收首飞机出列,进入跑道
{unsigned k;
tplane pl;
pl.num=li[1].num;
pl.do_time=li[1].do_time;
pl.mode=li[1].mode;
for(k=1;k<MAXP;k++){
if(li[k].num==0)break;
else li[k]=li[k+1];
}
return(pl);
}
void testl(tplane li[MAXP+1])
{unsigned i;
printf("飞机队列\n");
for(i=1;i<=MAXP;i++){
if(li[i].num!=0)printf("编号%d 进入队列的时间%d\n",li[i].num,li[i].do_time);
else break;
}
}
long minabc(long a,long b,long c)//abc三个数中取值最小者
{long ret;
if(a>b)ret=b;
else ret=a;
if(ret>c)ret=c;
return(ret);
}
//-------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -