📄 simulate.cpp
字号:
#include<iostream>
#include<fstream>
#include<queue>
#include"plane.h"
#include"is_arrive.h"
#include"data_process.h"
#include"runway.h"
using namespace std;
void simulate(int fly_time,int landing_time,double fly_p,double landing_p,time24 begin_time,time24 end_time)
{
int total_time,current_time;
plane next;
// struct cmp{
// bool operator ()(const plane &i,const plane &j){
// return i.get_time().get_minute()+i.get_fuel()>j.get_time().get_minute()+j.get_fuel();
// }
// };
queue<plane> fly_queue; //起飞队列
priority_queue<plane> landing_queue; //降落队列
runway air_runway(fly_time,landing_time);
is_arrive fly_arrive(fly_p);
is_arrive landing_arrive(landing_p);
data_process process;
cout<<endl;
cout<<" 显示小型机场及飞机信息 : "<<endl;
cout<<"┌──────────────────┐"<<endl;
cout<<" 飞机起飞需要的时间: "<<fly_time<<endl;
cout<<" 飞机降落需要的时间: "<<landing_time<<endl;
cout<<" 飞机起飞的概率: "<<fly_p<<endl;
cout<<" 飞机降落的概率: "<<landing_p<<endl;
cout<<" 小型机场开始模拟时间:";
begin_time.writeTime();
cout<<" 小型机场结束模拟时间:";
end_time.writeTime();
cout<<"└──────────────────┘"<<endl;
cout<<endl;
total_time=end_time-begin_time;
for(current_time=1;current_time<=total_time;current_time++)
{
if(fly_arrive.query()){
plane plane(time24(0,current_time+begin_time.get_minute()));
fly_queue.push(plane);
}
if(landing_arrive.query()){
int fuel = (int)((rand()/(double)RAND_MAX)*landing_time);
plane plane(time24(0,current_time+begin_time.get_minute()),fuel);
landing_queue.push(plane);
}
if(!air_runway.is_busy() )
{
while(!landing_queue.empty())
{
next=landing_queue.top();
landing_queue.pop();
if(next.is_falled(current_time+begin_time.get_minute())){
process.add_fall_count();
}
process.land_next_number(current_time+begin_time.get_minute()-next.get_time().get_minute());
air_runway.start_landing();
}
}
if(!air_runway.is_busy() &&!fly_queue.empty())
{
next=fly_queue.front();
fly_queue.pop();
process.fly_next_number(current_time+begin_time.get_minute()-next.get_time().get_minute());
air_runway.start_fly();
}
air_runway.one_second();
}
while(!landing_queue.empty())
{
plane next = landing_queue.top();
if(next.is_falled(end_time.get_minute()))
process.add_fall_count();
landing_queue.pop();
}
cout<<" 模拟结果 :"<<endl<<endl;
cout<<" 在模拟时间内起飞的飞机的架数 : ";
cout<<process.how_many_fly_numbers()<<endl;
cout<<" 飞机花费在起飞队列中的平均时间 : ";
cout<<process.fly_average()<<endl;
cout<<" 在模拟时间内降落的飞机的架数 : ";
cout<<process.how_many_land_numbers()<<endl;
cout<<" 飞机花费在降落队列中的平均时间 : ";
cout<<process.land_average()<<endl;
cout<<" 降落之前由于燃料用尽而发生坠毁的飞机的架数 : ";
cout<<process.get_fall_count()<<endl<<endl;
cout<<"*****************************************"<<endl;
}
int main()
{
int fly_time,landing_time,n;
double fly_p,landing_p;
time24 begin_time,end_time;
int aa,bb,cc,dd;
ifstream inFile;
inFile.open("input.txt"); //打开输入文件
inFile>>n;
cout<<" Begin........"<<endl<<endl;
for (int i=0;i<n;i++)
{
cout<<" 读入第"<<i+1<<"次小型机场信息.........";
inFile >> fly_time>>landing_time
>>fly_p>>landing_p
>>aa>>bb>>cc>>dd;
cout<<"succeed!"<<endl;
time24 begin_time(aa,bb) ,end_time(cc,dd);
simulate(fly_time,landing_time,fly_p,landing_p,begin_time,end_time);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -