任务要求:
现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示,其使用规定如下:
① 楼层号为0~20,其中0号为地下一层
② 有楼层限制的电梯不在相应楼层停靠,如单双层
③ 所有电梯采用统一按钮控制
④ 请根据上述要求设计并实现一个电梯控制程序,使得用户平均等待时间尽可能小,如果有图形显示就更好了。
电梯编号 |
可服务楼层 |
最大乘客数量 |
最大载重量 |
1 |
全部楼层 |
10 |
800 kg |
2 |
单层 |
10 |
800 kg |
3 |
双层 |
10 |
800 kg |
4 |
全部楼层 |
20 |
2000 kg |
担任角色:
在本次实验中我担当驾驶员
实验代码:
Github地址:Mycode/电梯.cpp at main · Meigumi0530/Mycode (github.com)
实验过程:
这次结对编程是由我与魏新宇同学一起合作完成,本次结对编程中我担任驾驶员这一角色这次的项目于难度比上次的项目难度难了许多,首先就是在编程语言上的选择,因为我与魏新宇同学两人都只有c语言的基础,所以很快就决定了拿c语言来实现本次任务
下面是对是实现电梯调度程序的设计思路
主要功能由4个子函数构成,第一个子函数代表一号电梯的运行,第二个函数代表二号电梯的运行,第三个函数代表三号电梯的运行,第四个函数代表第四个电梯的运行。可想而知,每个电梯的函数所执行的功能基本是一致的,所以一开始我们便想到只要编写好第一个电梯的运行函数,其他3个电梯的运行函数便能一一攻破。首先单一介绍第一个电梯函数所实现的功能,考虑到电梯不可能一直在一层,所以在使用的过程中,可能遇到电梯在别的楼层停靠,那么就需要等待,这里可用随机数表示此时电梯停在哪层。函数一开始便表明了这个电梯所能容纳的人数以及最大载重量,那么我们需要对每次进来的人数进行统计,然后对他们的体重进行统计,在现实生活中,电梯通过电路和物理相关的知识能自动得出体重,但在C程序中很难实现,我和魏新宇商讨过后,决定人为的输入体重,以模仿电梯自动获取重量,对体重进行求和,如果超重了就会提示下去一个人以致于电梯可以正常运行。然后,程序中用到了switch()语句用来选择下楼还是上楼操作。之后,每个人输入自己想去的楼层,利用冒泡排序对这些输入的楼层进行排序,从小到大,电梯然后可以按照这个顺序依次上楼并停下,按照这个序列,到某层停下后,可以提示这层有没有人进来,如果有人进来,会计算他们的体重会不会超重,如果不会超重,统计这个人想上的楼层,然后显示出来。如此看来程序是完美的,但其实还是存在缺陷的,我们所设计的程序,在中途接人时,只能进入一个人,进入多个人会导致运行出错,这一点很可惜,我们能力有限没改出来。电梯下楼的算法和上楼的算法大致相同,就是在冒泡排序那里将从小到大的顺序改为由大到小的顺序,以实现正常的下楼顺序。
对于后面三个电梯函数,所编写的算法和第一个电梯函数基本一直,除了电梯限制人数和最大载重量的不同,以及电梯所停靠的楼层是全部楼层还是单双层,这3处不同稍作修改就能实现。对于全部楼层的程序的1号电梯和4号电梯,电梯一开始的位置是随机的,可以用随机数函数表示,但2号电梯和3号电梯很难用随机数得到准确单双层楼层号,我试着用了(rand()*10)*2+1结果也并不正确,也许没有这种表达方式。魏新宇同学表示他也不清楚,所以在这里可以人为的提醒2号电梯和3号电梯只能到达单层号楼或者双层号楼,这里我和魏新宇同学都认为是一个投机行为,现实生活中,我感觉应该用到中断和电路的知识以及红外感应的方式,人为输出提醒标志应该也是一种很好的解决方法。到这里基本介绍完了,算法算是比较简单的,这也和我们的能力有关。程序中用到了大量的switch()语句,以及冒泡排序语句,思路很清晰,功能也很简单。
对结对伙伴的评价:
魏新宇同学的编程能力不是太强,但是他对于整体框架的理解确实非常迅速,节约了我很多时间。此外,新宇同学的计划性也非常强,在我们一起完成作业的时间中,他习惯于首先推出一个计划,并且严格去执行,从而使得整件事情进行得非常高效。但是魏新宇同学的缺点在于他有时候会比较急躁,特别是我们陷入困境的时候,调试的过程是非常需要耐心的,我觉得魏新宇同学在这方面应该多多进步才行。相比于他,我自认为编程能力还比较强,对c语言本身也算是掌握得比较熟练,所以,我主要担当起了编程的工作。其次我觉得我的速度也非常快,无论是在思考问题还是在敲代码。而我的缺点,新宇也和我谈及过,就是在合作过程中,还是出现了一点分歧,不过可能考虑到他的感受,我没有直接和他明说。我之后也觉得在以后和任何人合作过程中,对事不对人,有啥分歧可以直接说出来,这样也有利于解决问题,不要太腼腆了。所以,不得不说,我认为我和魏新宇这个组合是非常恰当的。
除此之外,结对编程的效率绝对是非常高的,就我这次的体会来言,放在平时,我总是习惯于编好一个函数就去上网聊天什么的,一天下来,不仅代码的质量不高,数量也不多。但是和程志的合作过程中,由于我们时常对代码进行交流,我一次都没有走神,效率非常之高。通俗点来说,就是“完完全全沉浸在了代码的海洋中无法自拔”,不得不说这种感觉非常充实。最重要的一点就是,通过结对编程,我也学习到了很多知识,魏新宇同学在很多方面都比我强,在编程的过程中,他时常指出我代码风格上的错误。比如我没有初始化的习惯等等。这个过程中的交流让人觉得受益匪浅。
相反的,结对编程也有一个缺点,那就是太累了,我和魏新宇约好那个时候开始实现我们的算法,整个过程中,我们不断的交流,争论。 我主要是负责写代码,一边盯着屏幕一边认真听程志的一些指挥和建议,一个下午下来,我已经感觉有些心有余而力不足了,虽然我们的工作量提高了,错误率减少了,但是实在是让人心力疲惫。
合作照片:
标签:结对,函数,编程,电梯,魏新宇,楼层 From: https://www.cnblogs.com/gsy0530/p/16881982.html