题目:电梯调度
设计:郭庆樑,张科
一、设计思路
1.问题描述:
说明:电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。具体而言,如果电梯现在朝上运动,
* 如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;如果电梯向下运动,则刚好相反。
* 设计要求:每一对学生将设计一套接口和类定义这样一种算法提供者可以提供他/她实现“电梯调度程序”。
避免出现 “公共汽车”最坏情况的算法。该算法把电梯作为总线,它从底部到顶部,停在每一层楼,打开门,让人们进出,然后把门关上,继续前进。之后到达顶层,它会下去。该算法能够满足所有的要求,但它显然不是最快的算法。
* 设计提示:可以用一个结构体表示乘电梯的人,其中内容包括人的姓名、起始楼层、目的楼层;建立一个结构体的数组模拟当前所有需要乘电梯的人。把这个结构体数组作为程序的输入, * 通过对数组中每个人的起始楼层和目的楼层进行分析,确定每个人进出电梯的顺序,并打印输出。
2.算法设计:
算法思想:本算法只设计了四部电梯,电梯只停8-18楼,所以在电梯内部,上楼只能按8-18层,下楼则全部可以按;且两部电梯只停偶数层,两部电梯只停奇数层。通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼驻停。同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。随后再搭载去反方向的乘客。实现电梯的升降操作。
二、程序总流程
三、总结
这次电梯调度程序,是我们结对编程的最后一个题目,在以往的结对编程中,我们收获颇丰,懂得了一个程序并不只是实现,还要进行优化,调试,寻找bug,并解决。而一个人的思路,总是会被先入为主,很难改变甚至摆脱之前的思路,重新设计,而两个人一起编程就解决了这个问题。