关于结对编程——电梯调度
2016-03-27 23:05 饭大人 阅读(300) 评论(0) 编辑 收藏 举报由于时间还是比较充裕,现在还未进入两人讨论,就在这篇博客中说一下我对这个题目的一些想法和思路。
现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示:
电梯编号 |
可服务楼层 |
最大乘客数量 |
最大载重量 |
1 |
全部楼层 |
10 |
800 kg |
2 |
单层 |
10 |
800 kg |
3 |
双层 |
20 |
1600 kg |
4 |
全部楼层 |
20 |
2000 kg |
其使用规定如下:
1、楼层号为0~20,其中0号为地下一层;
2、有楼层限制的电梯不在响应楼层停靠,如单双层;
3、所有电梯采用统一按钮控制
请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了。
以上是该题目的基本要求。
首先,0号为地下一层,也就是说,我们的出入一般都在0和1号(地下和大堂)。设计程序时,如果乘客选择0号,那么当乘客下电梯之后,电梯将自动回到1号位置,方便下一波乘客乘坐。
从表中可以知道电梯有楼层限制,人数限制,以及载重量限制,我觉得可以用switch,分类讨论乘客进入了那部电梯。
人数以及载重量可以用声音或者灯光来显示是否超过,当然这里还有一个小问题就是,这个程序里面说的是电梯,我们不可能要求每位乘客输入自己的体重以及自己携带物品的重量,这个问题需要讨论了。。。
关于单双层问题,如果乘客进入了此类电梯,摁到了无法到达的楼层,我想采用电梯不动或者说无法响应的方式,一是这样代码比较好写,二是比较贴近生活。
接下来就是搭乘电梯的问题,如果不工作时,1,4号电梯将分别停留在1和21层,而2,3号电梯将分别停留在10,11层(这是在一篇博客中看到的,说好的电梯调度应该要尽量减少乘客的等待时间)。我们假设电梯所在楼层数为a,乘客所在楼层数为b,两个相邻楼层之间运行时间为t(此处指的是匀速),乘客需要到达楼层数为c,电梯开关门时间为t1,乘客进出入时间为t2,乘客等待时间为t0,搭乘总时长为T,↑表示电梯或者乘客需求向上,↓表示电梯或者乘客需求向下。
全部楼层:
(1)乘客需求向上(此时电梯无人使用)
1. a>b,即电梯先下后上,t0=(a-b)*t; T=t0+t1+t2+(c-b)*t;
2. a<b,即电梯直接上,t0=(b-a)*t; T=t0+t1+t2+(c-b)*t;
3. a=b,即乘客无需等待, T=t1+t2+(c-b)*t;
(2)乘客需求向上(此时电梯正在向上行驶)
1. a>b,即电梯需要到达指定楼层才会向下(我们假定必须要上到21层之后才会向下行驶),t0=(21-a+21-b)*t; T=t0+t1+t2+(c-b)*t;
2. a<b,即电梯直接上,t0=(b-a)*t; T=t0+t1+t2+(c-b)*t;
3. a=b,即乘客无需等待, T=t1+t2+(c-b)*t;
(3)乘客需求向上(此时电梯正在向下行驶)
1. a>b,即电梯需要到达指定楼层才会向上(我们假定必须要下到1层之后才会向上行驶),t0=(b-1+a-1)*t; T=t0+t1+t2+(c-b)*t;
2. a<b,即电梯先下后上,t0=(b-1+a-1)*t; T=t0+t1+t2+(c-b)*t;
3. a=b,t0=(b-1+a-1)*t; T=t0+t1+t2+(c-b)*t;
乘客需求向上时,以此类推,在这里不一一赘述。
单双层电梯与全部楼层的情况类似,但是运行时间要将t改为2t。
以上就是我的想法,和对这道题的理解,如果有哪里写错或者算错的地方,请助教和老师多多指正。。。