离散事件动态模拟 机场航空管制模拟 数据结构.docx

上传人:b****2 文档编号:2199146 上传时间:2022-10-27 格式:DOCX 页数:14 大小:708.47KB
下载 相关 举报
离散事件动态模拟 机场航空管制模拟 数据结构.docx_第1页
第1页 / 共14页
离散事件动态模拟 机场航空管制模拟 数据结构.docx_第2页
第2页 / 共14页
离散事件动态模拟 机场航空管制模拟 数据结构.docx_第3页
第3页 / 共14页
离散事件动态模拟 机场航空管制模拟 数据结构.docx_第4页
第4页 / 共14页
离散事件动态模拟 机场航空管制模拟 数据结构.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

离散事件动态模拟 机场航空管制模拟 数据结构.docx

《离散事件动态模拟 机场航空管制模拟 数据结构.docx》由会员分享,可在线阅读,更多相关《离散事件动态模拟 机场航空管制模拟 数据结构.docx(14页珍藏版)》请在冰豆网上搜索。

离散事件动态模拟 机场航空管制模拟 数据结构.docx

离散事件动态模拟机场航空管制模拟数据结构

实验名称机场航空管制模拟

 

学院:

计算机科学与技术学院、软件学院

组长:

顾宏

指导老师:

叶阳

完成日期:

2012年5月2日

目录

一、实验内容分析2

1.1任务描述2

1.2基本数据2

1.2.1模拟参数变量2

1.3类的设计3

1.3.1客户类:

Plane类3

1.3.2队列类:

Queue类3

1.3.3模拟类:

Simulation类4

1.3.4计时器:

Timer类5

1.4基本流程5

二、实验验证分析7

2.1输入的形式和输入值的范围7

2.2输出的形式7

跑道的繁忙程度、着陆飞机的总的等待时间和平均等待时间、起飞飞机的总的等待时间和平均等待时间,计算每架飞机花费在一个队列中的平均时间。

7

2.3程序所能达到的功能7

2.4测试数据7

三、调试分析8

3.1调试中的技术问题与具体解决办法8

3.2技术难点分析(本人的分析过程,仅供参考,以实际程序为准)8

3.3调试错误及修正方法9

四、测试结果9

4.1程序运行结果9

4.2利用边界数据及极端数据运行结果10

五、实验分工11

六、附录:

代码12

 

一、实验内容分析

1.1任务描述

假设机场有一条跑道,每架飞机需花费一定时间着陆,花费一定时间起飞,飞机的起降满足一定的概率。

一般来讲,机场存在两个队列,一个等待着陆的飞机队列和一个等待起飞的飞机队列,同样等待时间下,等待着陆的飞机比准备起飞的飞机具有更高的优先级。

试编写程序模拟这个机场的运行。

1.1.1目标

要求能在指定的时间内(如9:

00-22:

00)完成系统模拟,并计算出跑道的繁忙程度、着陆飞机的总的等待时间和平均等待时间、起飞飞机的总的等待时间和平均等待时间,计算每架飞机花费在一个队列中的平均时间。

1.2基本数据

1.2.1模拟参数变量

说明

变量名

变量类型

降落所需的占用跑道的时间

loadingTime

int

起飞所需的占用跑道的时间

takeOffTime

int

降落每小时的数量

loadingNumPerHour

int

起飞每小时的数量

takeOffNumPerHour

int

模拟时间的长度

myLengthOfSimulation

string

降落的飞机总数

loadingSum

int

起飞的飞机总数

takeOffSum

int

计时器

myTimer

Timer

降落的队列

myLoadingPlanes

Queue

起飞的队列

myTakeOffPlanes

Queue

每个变量的说明

1.3类的设计

1.3.1客户类:

Plane类

Plane类储存飞机的基本信息:

intmyTimeOfArrival;//飞机到达的时间

intmyServiceTime;//飞机在跑道上的时间

图表1Plane类的定义和实现

1.3.2队列类:

Queue类

Queue类实现客户的进队、出队、判空、删除:

图表2队列的实现及其相关的操作

队列类里面还有一个Node类,是为了建立这个数据结构而建立的私有类型的类

主要参数有typedefNode*NodePointer;

NodePointermyFront,//指向队列的头

myBack;//指向队列的尾部

 

1.3.3模拟类:

Simulation类

图表3Simulation类程序初始化及其飞机使用时间的操作

模拟类是运行程序的主类,其主要参数为

//----输入

intloadingTime,takeOffTime;//分别为降落和起飞所需的占用跑道的时间,在加入队列时由随机数产生

doubleloadingRate,takeOffRate;//飞奔为降落和起飞的频率

intloadingNumPerHour,takeOffNumPerHour;

//分别为降落和起飞每小时的数量

stringmyLengthOfSimulation;//模拟时间的长度

//----输出

intloadingSum,takeOffSum;//降落的飞机总数,起飞的飞机总数,之和就是跑道的繁忙程度

intloadingSumWaitTime,takeOffSumWaitTime;

/*

降落和起飞在各自队列中等待的时间之和,之和就是所有飞机在各自队列中等待时间之和

*/

//--CountdownTimer

TimermyTimer;

//--降落和起飞的队列

QueuemyLoadingPlanes,myTakeOffPlanes;

1.3.4计时器:

Timer类

图表4Timer类设置时间取得时间,计算相关的剩余时间

计算器类是产生每架飞机在跑道上的时间和控制整个程序的时间,主要参数为:

intmyMinutes;

1.4基本流程

1.4.1类及类间关系

图表5类之间的关系图

Simulation类调用Timer类产生一个时间段,并将该值赋值给Queue类中的对象,二Queue类的元素类型是Plane类型的

1.4.2程序流程图

本实验的基本流程图:

图表6程序流程图

二、实验验证分析

2.1输入的形式和输入值的范围

每小时起飞飞机的架次,每小时降落飞机的架次takeOffNumPerHour,loadingNumPerHourtotal:

int型,无范围要求

输入一天跑道所运行的时间:

myLengthOfSimulation:

string型,正常的24小时的格式输入,比如09:

00-22:

00

2.2输出的形式

跑道的繁忙程度、着陆飞机的总的等待时间和平均等待时间、起飞飞机的总的等待时间和平均等待时间,计算每架飞机花费在一个队列中的平均时间。

2.3程序所能达到的功能

利用离散事件模拟来模拟每天的飞机场跑道业务,更直观地了解跑道从开始到结束,跑道的使用情况

2.4测试数据

假设某天09:

00-11:

00开始使用跑道,每小时起飞飞机333架次,每小时降落飞机333架次

图表7测试正确数据

图表8测试错误数据

图表9在输入错误的极端数据下程序任然继续运行,给出错误数据源

三、调试分析

3.1调试中的技术问题与具体解决办法

1、如何检查上一架飞机已经使用完跑道了

解决方法:

用一个while循环,直到其剩余的使用时间为0

2、如何按照题目要求的格式输入时间

解决方法:

加入一个格式输入函数。

3、求平均使用时间和平均等待时间的时候会出现死机的情况

解决方法:

加入一个异常处理,可以使程序在任何输入下任然能运行

3.2技术难点分析(本人的分析过程,仅供参考,以实际程序为准)

1、应该输入降落频率(loadingRate),和起飞频率(takeOffRate),这两个参数都是1分钟之内起飞和降落的飞机的频率。

输入的应该是1分钟之内起飞和降落的飞机的架次

2、飞机的起飞或降落都会占用跑道一段时间,降落所需时间为:

loadingTime,起飞所需时间为:

takeOffTime

3、“同样等待时间下,等待着陆的飞机比准备起飞的飞机具有更高的优先级。

试编写程序模拟这个机场的运行。

”这句话的意思是当跑道空闲时首先检查降落队列是否为空,如果降落队列不为空,则优先处理降落队列中的飞机,其次再检查起飞队列中的飞机。

4、指定时间的实现:

(如9:

00-22:

00)可以按照字符串输入,再将这个字符串的第1,34,67,910个转换成数字,再用后面的结束时间减去开始营业的时间,就可以得到机场的整个营业的总时间。

应该有一个计时器的类,即模拟时钟的类,用于周期性的实现飞机的起飞,降落,计算器应该有两个作用,第一个就是控制一天时间内程序的运行,第二个就是实现了题目要求的这句话“检查跑道是否空闲。

若空闲,首先检查着陆队列是否为非空,如果是,允许第一架飞机着陆;否则,处理起飞队列。

”每从起飞或者降落队列中取出一架飞机,就将其takeOffTime或者loadingTime设置为时钟,

5、自己实现队列的数据结构,因为要用到起飞和降落两个队列(因为先进入等待状态的起飞或者降落的飞机,应该先拥有跑道,所有即应是先进先出,所以用队列)队列可以用链表实现

6、跑道繁忙程度就应是跑道一天所经过的所有的起飞和降落的飞机架次之和

7、起飞或者降落的总的等待时间及应是所有起飞或者降落的飞机的各个等待时间之和。

其平均等待时间就是再除以起飞或者降落的所有架次,而“计算每架飞机花费在一个队列中的平均时间”应该是等待起飞的飞机和等待降落的飞机花在队列中时间之和在除以起飞和降落飞机的总数

3.3调试错误及修正方法

1、一开始输入架次较少时程序会死机。

修正方法是:

加入异常处理,因为架次少,那么频率低,产生的随机数永远比它大,无法使得程序进入循环,所以会使产生的等待队列中飞机的数量为0,在除法时会出现错误

2、在输入数字较小时,运行结果中显示数字为0,因为输入的飞机数量在程序中经过了先除以100再除以60的运算,会使得与产生随机数比较的值相对较小,应该输入较大的每小时起飞和降落的架次

四、测试结果

4.1程序运行结果

假设某天09:

00-22:

00开始使用跑道,每小时起飞飞机600架次,每小时降落飞机700架次

图表10正常输入。

4.2利用边界数据及极端数据运行结果

进行以下两组测试:

第一组:

机场跑道运行时间长,而每小时起飞和降落的架次少:

图表11第一组:

机场跑道运行时间长,而每小时起飞和降落的架次少:

图表12第一组:

机场跑道运行时间长,而每小时起飞和降落的架次少:

可以看出降落飞机的占用跑道次数最多,所以它是最优先的

第二组:

机场跑道运行时间短,但每小时起飞和降落的飞机架次多

图表13机场跑道运行时间短,但每小时起飞和降落的飞机架次多

输出结果都符合实际情况。

五、实验分工

代码编写:

负责人:

顾宏

参与者:

代码测试:

负责人:

顾宏

参与者:

结果分析:

负责人:

顾宏

参与者:

报告编写:

六、附录:

代码

driver.cpp运行程序

LQueue.cpp队列的实现及其相关的操作

Plane.cppPlane类的定义及其实现、

Timer.cpp计数器的实现,对时间的统计

Timer.hPlane.hLQueue.hSimulation.h相关cpp文件的定义文件

全部代码见代码文件夹

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1