代码改变世界

关于结对编程——电梯调度

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。

以上就是我的想法,和对这道题的理解,如果有哪里写错或者算错的地方,请助教和老师多多指正。。。