⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 利用C++ builder 6.0
💻 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 + -