用面向对象方法和面向对象程序设计语言,实现满足下述要求的一个高速公路客运活动**程序。
西安市到宝鸡市之间是我省主要的高速公路客运路线之一,经过简化后的客运路线端点、中途停靠点和里程如下图所示(括号里是简称,里程的单位是公里):
1) 从xn始发至bj的客车和从bj始发至xn的客车均有两种车型:沃尔沃(限定乘客人数为40人);依维柯(限定乘客人数为21人)。沃尔沃的速度为2公里/分钟,依维柯的速度为1.
4公里/分钟。
2) 起始状态时,xn拥有沃尔沃和依维柯客车分别为xnw和xny辆,bj拥有沃尔沃和依维柯客车分别为bjw和bjy辆。
3) 从xn至bj和从bj至xn的沃尔沃,均为上午8:30开始,每小时一班,最后一班为下午5:30;从xn至bj和从bj至xn的依维柯,均为上午8:
00开始,每20分钟一班,最后一班为下午6:00。
4) 从xn至bj的客车到达bj后,即成为从bj至xn的客车,排在当时bj同类车型的队尾,再按(3)确定发车时间;从bj至xn的客车到达xn后的规则相同。
5) 只考虑途中只有乘客下车、没有乘客上车的情况。
6) 有乘客下车时,不论方向与车型,停车时间统一为2分钟。
7) 乘坐从xn至bj客车的乘客,其下车点为xy、xp、wg、cp、gz和bj的可能性分别为p_xbxy、p_xbxp、p_xbwg、p_xbcp、p_xbgz和p_xbbj。这些可能性之和为1;乘坐从bj至xn客车的乘客,其下车点为gz、cp、wg、xp、xy和xn的可能性分别为p_bxgz、p_bxcp、p_bxwg、p_bxxp、p_bxxy和p_bxxn。这些可能性之和为1。
1) 从上午7:30开始到下午5:59为止,每分钟分别在xn和bj随机产生去往bj和xn方向的新到达的乘客。每分钟达到的人数范围为0~pn人。
2) 按照限定条件(7)的规定,随机产生新到达的乘客的目的地。
3) 乘客按到达的先后顺序上最近一辆(依照限定条件(3)的规定)始发的客车,若该车客满则等候下一辆始发的客车。
4) 若客车到达中途停靠站时有乘客在此下车,按限定条件(5)和(6)处理,否则不停车继续行驶。
1) xn和bj在**开始时拥有的客车数量xnw、xny、bjw和bjy。可先按xnw=5,xny=12,bjw=4,bjy=15进行,然后自己可以改变其中一个或多个,来观察不同起始状态对**结果的影响。
2) 确定乘客目的地的可能性p_xbxy、p_xbxp、p_xbwg、p_xbcp、p_xbgz和p_xbbj,以及p_bxgz、p_bxcp、p_bxwg、p_bxxp、p_bxxy和p_bxxn。应注意乘客去往远一些的目的地的可能性,通常大于去往近一些的目的地的可能性。
3) 每分钟达到的人数上限pn。可先按pn=2进行,然后自己可以改变,来观察不同的乘客到达量对**结果的影响。
1) 所**的实际客运活动每1分钟改变一次所有相关对象的状态。实际**时,可用机器时间的1秒钟对应于实际客运活动时间的1分钟。
2) 有简单的界面,以体现:
客运活动的当前时刻(如“上午10:02”);
xn和bj当前站内的客车(应有车型和编号)和等车乘客人数;
正在高速公路上行驶的客车的车型和编号;
正在高速公路上的客车的当前乘客人数和当前位置。如果用数据而不是用图形表示,应给出相对于上次停靠站的位置参数,如:从bj到xn时的“蔡家坡以东3公里”,从xn到bj时的“咸阳以西10公里”,无论那个方向,正在停车下人时的“武功站”,等等。
注意能说明问题即可,切忌把主要精力放在界面上而忽视了实质问题。
由于目前多数同学还没有学习过多进程或多线程的实现技术,因此面临的问题是:既要计时,又要改变相关对象的状态,还要展示出当前所有对象的相关状态。建议大家想象一下动画片的原理:
将多个固定和静止的画面定时、按顺序地放映出来,就变成了活动的画面。所以,可以在程序中定义一个主循环,在该循环外进行必要的初始化,进入后每秒钟执行一次,以遍历方式一一激励当前已经产生的对象,由它们根据自己的当前状态和相关的状态变化规则,决定是否需要改变、改变成什么样的下状态,以及按照上述行为特征的设计展示必要的对象状态。这样,就可以用串行方式模拟并发的活动了。
另外,乘客到达的概率本应服从泊松分布,但目前语言直接提供的伪随机数产生函数是服从均匀分布的,因此可以简化成均匀分布。
对于学有余力的同学,可在完成本作业的基础上,扩大自己的想象力,选作一些更接近实际要求的内容。例如,乘客到达数量的上限pn实际上是时间的函数(每天有些时段是乘客到达高峰,有些则很少有到达);乘客实际上具有自己的个性要求(如宁可等待也只坐某一种类型的车,一家几口人不会因车上没有位置而乘坐不同的车等);途中停靠站会有上车的乘客;等等。
另外,如果在设计时充分地考虑了参数化,应当很容易把问题域变成另一条高速公路客运线路,甚至是铁路或民航。
最晚提交时间:期末考试前一周。
应提交的文档:
1) 设计说明书。内容包括:问题的描述;用面向对象分析与设计方法建立的模型;类、方法、全局变量或静态变量的命名规则;重要对象的组织结构;**流程;需要特别说明的类、方法和对象。
2) 源程序清单。不少于1/3的程序行有注释。
3) 运**况总结报告。通过有代表性的运行实例,叙述开发结果的运**况,分析其特点和存在的问题。
提交的方式:将上述三份文档用e-mail发给不要将可执行程序发来。
如果发现雷同的结果,按成绩平分的规则处理。
C上机作业答案
第一章作业答案 1.编写程序,将华氏温度转化为摄氏温度 公式 c 5 9 f 32 程序 include using namespace std void main float f,c cout please input f cin f c 5 f 32 9.0 cout c 运行结果 2.编写程序...
C语言上机作业
1 将下列程序进行调试,并在作业本上写上运行结果 main int a 1 if a 2 1 printf d is oushu a elseprintf d is jishu a 解答 本例题中你可以这样写 运行结果是 1 is jishu 作业 将上面程序进行修改,将a 1改成a 你的学号,例如...
C语言上机作业
1 利用指针变量,求一维数组的最大值。include main int a 10 int i,p,max p a max p for i 1 i 10 i p if max p max p printf max d max 2 利用指针变量和函数,把一维字符数组的内容逆序存放。include inc...