考核题目题目一问题描述,
要求设计一仿真程序实现N部电梯的有效调度运行。该实例是一个电梯载客问题,问题的描述如下,
某贸易中心共L层,设有载客电梯N部。
电梯的运行规则是:可到达每层。初始时:有N/3部电梯处在一层,N/3部电梯处在顶层,N/3部电梯处在第N/2层,空梯
每部电梯的最大乘员量均为K人/K*100Kg(K值可以根据仿真情况在10~20人之间确定)。
仿真开始后,任一层都有可能有人请求乘电梯。
每个人所要到达的楼层是随机的,开始在任一层等待电梯到来。
每个人乘坐电梯到达指定楼层后消失。
结束条件时方针时间到。
电梯运行速度为S秒/层(S值可以根据仿真情况在1~5之间确定),每人上下时间为T秒(T值可以根据仿真情况在2~10之间确定)。
电梯运行的方向由先发出请求者决定,不允许后发出请求者改变电梯的当前运行方向,除非是未被请求的空梯。
设计一个易于理解的界面,动态显示各梯的载客与运行情况(上、下或停止),动态显示各楼层的人员停留情况与要求乘梯情况;动态显示从仿真开始到目前的时间。
尽可能接近实际电梯的运行情况
题目二问题概述
① 有一种自动售货机VM,可售三种商品:可乐(每听$0.25),咖啡(每听$0.30),餐巾纸(每包$0.05)。每种商品的示意图形下方都有一个按钮。一台VM中最多能够容纳NC听可乐、NF听咖啡、NT包餐巾纸。
② 顾客使用VM购买商品时,先从投币口投入硬币(共有三种硬币:$0.05;$0.10;$0.25),在投入的硬币总值达到或超过其欲购商品之价格后,再按下对应商品的按钮,VM即从出货口自动吐出一件商品,并从找币口找零。
③ 如果顾客在其投入的硬币总值没有达到其欲购商品之价格时就按下了对应商品的按钮,或者最近一次投币30秒后既不继续投币,也不按下商品按钮,VM均从找币口吐出与该顾客已投入的硬币总值等值的硬币,但不吐出商品。
④ 如果顾客欲购之商品已经售完,则在顾客按下该商品的按钮后,VM从找币口吐出与该顾客已投入的硬币总值等值的硬币。
⑤ 当某种商品还剩NL听/包时,VM即自动发出短信,将VM的代号和缺货的商品名称通知管理人员。管理人员将在时间TM后收到短信,再用时间TS到达VM,并使VM的所有商品存货都达到最大容纳量,取走VM中的硬币,并留有找零的硬币:$0.05、$0.10、$0.25分别留C5、C10、C25枚。
须仿真的活动及开发结果的行为特征
1、开始仿真时,应随机产生VM中三种商品的存货量(不能超过其最大容纳量)和VM中三种硬币的数量(分别不小于C5、C10、C25枚)。
2、仿真中,应随机产生前来购物的顾客,随机产生其欲购买的商品种类,随机产生顾客的投币行为(包括③描述的行为),按问题域概述给出的要求进行VM自动售货活动的仿真。
3、NC、NF、NT、NL、C5、C10、C25的值应在运行仿真程序时用命令行给出,或者在开始仿真时从界面输入。
4、实时显示各种商品的当前存货量。
5、出现情况⑤时,应显示所发的短信内容,并随机决定TM和TS的值。在管理人员到达VM之前,应照常进行顾客购物的仿真。管理人员加货和取款的持续时间可忽略不计。
6、仿真开始后,应自动记销售流水帐。该流水帐的每一行对应着一次售货,记录着所售出的商品名称和售出时间。
7、仿真结束时,应自动产生销售报表。该报表应给出本次模拟过程中:每种商品的销售总量与价值合计;所有售出商品的价值总计;每种商品的库存量;模拟开始、结束时各自的库存金额;管理人员每次加货的时间、各商品加货量、取走的硬币总额。
注意:界面能说明问题即可,切忌把主要精力放在界面上而忽视了实质问题。
提示可能有些同学面临的问题是如何既要计时、又要改变相关对象的状态、还要展示出当前所有对象的相关状态。实际上,完全可以用串行方式来模拟并发的活动。建议大家想象一下动画片的原理:将多个固定和静止的画面定时、按顺序地放映出来,就变成了活动的画面。所以,可以在程序中定义一个主循环,在该循环外进行必要的初始化,进入后每秒钟执行一次,以遍历方式一一激励当前已经产生的对象,由它们根据自己的当前状态和相关的状态变化规则,决定是否需要改变、改变成什么样的下状态,以及按照上述行为特征的设计展示必要的对象状态。
另外,顾客到达的概率本应服从泊松分布,但目前语言直接提供的伪随机数产生函数是服从均匀分布的,因此可以简化成均匀分布。
选作学有余力的同学可在完成本作业的基础上,扩大自己的想象力,选作更接近实际要求的内容。例如,VM销售的商品种类与价格是在运行时设定的,而不是预先规定死的。