project飞机场实验报告讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Project 2
飞机场模拟问题
班级:2014级计科三班
姓名张万涛学号14348172
姓名张锐滨学号14348171
姓名覃佳学号14349020
【题目要求】
P1.将所有用于飞机场模拟的函数和方法组合成一个完整的程序。用飞机场模拟程序做若干次试运行实验,调整准备着陆和起飞的飞机数的期望值,并找出在飞机不会被拒绝服务的条件下这些数字尽可能大的近似值。如果队列的长度增加或减少,那么这些值将会有什么变化?
P2.修改模拟程序,使飞机场有两条飞机跑道,其中一条总是用来着陆,另一条总是用来起飞。比较双跑道机场能服务的总飞机数和单条飞机跑道的飞机场的相应数字,前者是否为后者的两倍?
P3.修改模拟程序,使飞机场有两条飞机跑道,其中一条总是用来着陆,另一条总是用来起飞。如果某个队列是空的,那么两条跑道都能用于其他的队列。如果着陆队列总是满的,并且另一架飞机要到达着陆,那么将停止起飞,并将两条跑道都用于清理搁置的着陆飞机。
P4.修改模拟程序,使飞机场有3条飞机跑道,其中各保留一条总是用于着陆和起飞,第三条用于着陆,但在着陆队列为空的情况下,第三条亦可用于起飞。
P5.修改最初的模拟程序(单条跑道),使得当每架飞机到达着陆时,它将有(作为它的数据成员的)一个(随机产生的)油位,以剩余的时间单元度量。如果飞机没有足够的油位在队列中等待,则允许它立即着陆。因此着陆队列里的飞机可能需要再等待附加的单元,因此可能用完自身的燃料。作为着陆函数的一部分要检查这一点,并查明在飞机由于燃料耗尽而开始坠毁前机场有多忙。
P6.写一个占位程序来代替随机函数,这个占位程序既能用于调试程序又允许用户正确地控制每一个时间单元内每个队列到达的飞机数。
【数据结构与算法】
P1题目比较简单,就是把课本给的代码连同课本附录B生成随机数的方法进行整合。①输入结束时间、队列的最大值,飞机起飞和降落的频率,建立一条跑道。②初始化current_time的值为0,当时间未结束时进行一个循环。该循环大致是将等待降落的飞机加入等待降落队列,如果队列已满就拒绝它;将等待起飞的飞机加入等待起飞队列,如果队列已满也同样拒绝它。如果有飞机等待降落,则让飞机降落;若没有,就判断也没有飞机等待起飞,若也为空则为跑道是空闲状态;若有,则让飞机起飞。③跳出循环后,将飞机请求数、起飞降落数量和时间等等输出。
P2与P1有相似之处,不同的是有了起飞跑道和降落跑道两个。因此建立了等待起飞和等待降落两个队列。若有飞机等待降落,则让飞机降落;如果没有,则等待降落队列为空。在判断又无飞机要起飞,如果有,则让飞机起飞,如果没有,那么等待起飞队列也是空的。其他的步骤和P1大致相同。
P3题目是在P2的基础上再进行修改。与前面不同的是,降落跑道如果返回值是land(降落),则让等待降落的飞机降落。如果降落跑道没有飞机着陆,就判断返回值是否为take_off(起飞),如果也不是那么跑道空闲中;如果是,则让飞机起飞。其他与P1大致相同
Runway类的public成员中增加:
int arrival_size();
int departure_size();
int Runway::departure_size()
{
return takeoff.size();
}
int Runway::arrival_size()
{
return landing.size();
}
P4即是在P1基础上增加两条跑道,判断方法与P3基本一致。
P5 先判断是否有紧急事件,如果没有,就让请求起飞或降落的飞机分别加入到等待起飞和等待降落的队列中。接着判断是否有飞机处于紧急降落状态,如果有,则让紧急需要降落的飞机降落;如果没有,调用activity函数,如果返回值是land,则让等待降落的飞机降落,反之若返回值是take_off,则让等待起飞的飞机起飞。Plane类的public成员中增
Plane_status get_status() const;
成员中增加:int kj;
定义:
#include
using namespace std;
#ifndef PLANE_STATUS
#define PLANE_STATUS
enum Plane_status {null, arriving, departing,emergency};
#endif
#ifndef PLANE
#define PLANE
class Plane{
public:
Plane();
Plane(int flt, int time, Plane_status status);
void refuse() const;
void land(int time) const;
void fly(int time) const;
int started() const;
Plane_status get_status() const;
private:
int flt_num;
int clock_start;
Plane_status state;
int fuel;
};
#endif
P6先初始化各个函数和变量,进而选择飞机场的模拟模式,可以进行随机数模拟也可以进行用户输入,最后得出结果用于分析。
【测试数据、结果及分析】
输入的数据就是书中给出的例子,5、1000、0.48、0.48
下面给出一些运行截图