Deadline:2018.02.22 22:00 pm
题目描述基础:一栋10层的大楼(楼层编号1-10),设有一台无限载重的电梯,初始时电梯停在1层。电梯移动1层的耗时为1,在某一层停靠的耗时为1(时间初始为0)。为了使得乘客等待的时间(电梯在目的层的停靠时刻 - 乘客发出请求时刻)总和最小,请你编写一个程序来进行电梯调度。
本次作业是在上一次的电梯调度的代码上进行改善迭代,不仅加入新的功能,也对程序的输入输出提出了新的要求。
作业要求
一、 输入从文件读取,输出是写入文件。
大家在学习 C 语言的时候,应该明白了控制台程序的输入和输出。但文件操作往往是之前的课程中被忽略的一个部分,大家有没有试过“如果我要将程序的输出保存下来”、“如果我要从一个文件中获得输入”这些实操的环节呢?如果没有,现在是一个再好不过的学习机会,来吧,learning by doing!
要求:输入输出改成文件输入输出操作。输入文件的文件名为 input.txt
里面保存着输入样例,一个输入为一行,输入的格式见作业的第二条要求。
例如:
0 1 5
2 2 5
程序输出每次对应的决策,每一行的输出格式为 xx时,停靠在x楼
。输出在文件名为output.txt
的文件中。
二、这次的乘客不再像上一次作业那样只会去顶楼或者是 1 楼了,现在要使我们的程序功能更加贴近现实。
迭代:乘客会前往任意一层,请修改程序代码并实现。自然,输入请求就变为了:每个请求一行,格式为 请求时刻 起始楼层数 去往楼层
。同样,大家也需要自己构造测试样例,让这台“电梯”尽可能好的工作。构造五个输入样例,最后输出完成五个请求(所有乘客都到达目的地)后,各乘客的等待时间总和。输入输出的详细例子可以参加上一次作业的要求。
编程语言选择C或C++都可以,但需要符合编码规范,且必须要有注释。编码规范、注释、git commit 信息,都可以上网搜索写法,学会合理使用搜索引擎来学习是计算机专业学生的必经之路。
github使用教程参考:http://www.cnblogs.com/schaepher/p/5561193.html
博客内容
提交一篇新博客,内容可以包含如下的参考但不仅限于:
- 记录文件读写的学习过程、学习心得。
- 编码规范、注释、git commit 信息的学习心得和体会。
- 编码以及 debug 的过程、体会;程序的不断优化过程;代码行数、bug数、花费时间等数据。
- 本次作业的github链接,提交日志截图。(要在原来的仓库中迭代)
- 自己设计的测试样例,设计样例的理由,为什么通过这样的样例能说明电梯的可靠性等与样例设计有关的话题。
- 程序运行结果的截图等。
测试说明
测试机为Windows环境,所以提交到Github上的项目均需要建立一个名字为BIN的文件夹,里面必须含有可执行文件(以exe为后缀),相关的依赖库,以及输入和输出文件。请注意以下两点:
- 确保可执行文件的文件名为 elevator.exe,确保输入和输出文件的文件名为input.txt和output.txt。(注意:输入输出文件都需要采用相对地址,也即
./output.txt
) - 一个示例组织目录如下所示(仅为示例,命名、文件数量等未必需要遵守):
/ ElevatorProject(工程名字自行指定即可)
/ main.cpp
/ elevator.cpp
/ elevator.h
/ BIN
/ Lib.dll (exe运行需要的动态链接库文件,可以没有)
/ elevator.exe
/ input.txt
/ output.txt
你的程序必须可以在运行时读取 input.txt
中的数据并生成 output.txt
。方便助教在测试时进行批量测试。
一点提示
以下思路来自于邹欣老师:
电梯调度可以从下面两个出发点简化:
1)先实现一个 “公共汽车” bus mode, 电梯每个楼层都停,开门,上下乘客,关门,然后继续
2) 再实现一个 “出租车” taxi mode, 电梯一旦接到一个乘客,就直接把乘客送到目的地,途中不再响应其他乘客的需求。
让同学从这两个极端调度模式出发, 计算它们运行的效率。 然后再做比较符合实际的调度算法。
无法想出更优解的同学可以实现这两个简单思路,在博客中贴出自己的程序的构建,优化和思考过程,也算完成作业,但如果只完成最简单的思路没有继续优化的话会酌情扣分。
本次作业代码及随笔作业皆不得抄袭。迟交5天内扣5分,不交0分,抄袭倒扣20分。
由于助教、老师精力有限,手动复制粘贴大家的博客链接、github主页、项目地址,一个个帮大家编译代码肯定是不现实的,所以要规定各种格式(比如在博客下面回复自己的链接、第三次作业的文件目录格式等),然后交给爬虫来完成自动化测试,再由助教核对一遍数据确保无误。不注意格式,或者忘了填上链接,你可能不是故意的,而是无心之举,但这无疑要加大助教的工作量。这一次作业的文件目录层次、文件名称的命名务必请大家细心认真,若有错误的会酌情扣分。温馨提示:在下学期结束前尽量不要更改github用户名,因为已经爬取了大家的github主页地址。