数据结构大型实验报告—机场航空管制模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机场航空管制模拟

姓名

学号

班级

完成日期:2011.12.16

一、实验内容分析

1.明确实验题目目的

【问题描述】假设机场有一条跑道,每架飞机需花费一定时间着陆,花费一定时间起飞,飞机的起降满足一定的概率。一般来讲,机场存在两个队列,一个等待着陆的飞机队列和一个等待起飞的飞机队列,同样等待时间下,等待着陆的飞机比准备起飞的飞机具有更高的优先级。试编写程序模拟这个机场的运行。

【基本要求】使用队列或优先队列实现;要求可以变换起飞和着陆频率来模拟一天中的飞行高峰期和空闲期;要求可以改变着陆和起飞时间以模拟不同的效果。

【实现提示】可以假设有一个每次前进一分钟的模拟时钟,对于每一分钟,产生两个随机数:如果第一个随机数小于landingRate/60,那么一个“着陆到达”将发生并被添加到着陆队列中;如果第二个随机数小于takeOffRate/60,那么一个“起飞到达”将发生并被添加到起飞队列中。接着,检查跑道是否空闲。若空闲,首先检查着陆队列是否为非空,如果是,允许第一架飞机着陆;否则,处理起飞队列。

【运行结果要求】要求能在指定的时间内(如9:00-22:00)完成系统模拟,并计算出跑道的繁忙程度、着陆飞机的总的等待时间和平均等待时间、起飞飞机的总的等待时间和平均等待时间, 计算每架飞机花费在一个队列中的平均时间。

2.类

string mintime0Turn(int mintime) //////////若时刻的分位数值小于10,则前面自动置0

{

if (mintime%60<10) return "0";

return "";

}

class Plane{

public:

int applyTime,completeTime;

Plane(int a=0,int c=0)

{

applyTime=a;

completeTime=c;

}

};

class comp //////////设置优先级比较,先申请起降的飞机的优先级高

{

public:

bool operator()(Plane p1,Plane p2)

{

return p1.applyTime>p2.applyTime;

}

};

class Simulation

{

public:

Simulation();

void run(); //模拟运行

void print();//打印运行结果

private:

int workingTime; //跑道处于工作状态的时间

int landingRate,takeOffRate; //飞机起降频率

int landingTime,takeOffTime; //飞机起降耗时

int beginTime,endTime; //模拟起止时刻

int currTime,nextfreeTime; //当前时刻、下次跑道处于空闲状态的时刻

int waitingforlandingTime,waitingfortakeOffTime;//等待起降的总时间

int landingPass,takeOffPass; //处理起降的次数

int unfinishedlanding,unfinishedtakeOff; //未完成的起降申请

priority_queue,comp>landing_queue,takeOff_queue;

};

3.程序流程图

二、实验验证分析及测试结果1输入的形式和输入值的范围:

飞机着陆频率(0-60之间的整数)

飞机起飞频率(0-60之间的整数)

每架飞机着陆需花费的时间(min)

每架飞机起飞需花费的时间(min)

完成系统模拟的指定时间段(如9:00-22:00则输人9 22)

均为整形。

2输出的形式:

跑道的繁忙程度double

处理飞机着陆次数int

处理飞机起飞次数int

结束时着陆队列的飞机数int

结束时起飞队列的飞机数int

着陆飞机的总的等待时间(min) int

着陆飞机的平均等待时间(min) double

起飞飞机的总的等待时间(min) int

起飞飞机的平均等待时间(min) double

每架飞机花费在一个队列中的平均时间(min) double

3程序所能达到的功能:

模拟机场航空管制。

4测试数据:

Input

Output

三、调试分析

(1)问题:如何解决时刻显示问题,例如生活中接触到的时间显示没有19:9而是19:09;

解决:用以下函数解决。

string mintime0Turn(int mintime) //////////若时刻的分位数值小于10,则前面自动置0

{

if (mintime%60<10) return "0";

return "";

}

(2)问题:在调试过程中发现有些飞机起降完成的时间在模拟终止时间之后;

解决:应判断当前时刻加起降耗时的值不大于模拟总时间。

while(currTime>=nextfreeTime&&((!landing_queue.empty()&&(currTime+landingTime<( endTime-beginTime)*60))||(!takeOff_queue.empty()&&(currTime+takeOffTime<(endTim e-beginTime)*60))))

(3)问题:调试的过程中多次出现输出几行后程序就终止的情况;

解决:撤销刚才的操作,重新修改。

相关文档
最新文档