Deadline:2018.04.22 22:00 pm
一、MOOC在线课程学习
课程地址:http://www.icourse163.org/course/PKU-1002029030
学习前两章内容(从C到C++、类和对象基础),并完成相应的章节测验,然后将课程进度截图上传到蓝墨云班课。
二、Pintia题目集
作业地址:https://pintia.cn/problem-sets/985353690216259584/problems
三、电梯调度编程题
经过了寒假的两次编程训练,大家大多对于电梯调度已有了自己的思路,但同学们的代码仍是C语言面向过程的风格。从本次作业开始,我们将以面向对象程序设计的角度,重新思考这个问题。
题目重述
(注意:本次题目需求与寒假时有所不同!)
一栋3层的大楼(楼层编号0-2),设有一台无限载重的电梯,初始时电梯停在0层。电梯移动1层的耗时为1,在某一层停靠的耗时为1(时间初始为0)。电梯不允许未仆先知,必须在时间到了之后才能开始响应这条请求。
为了使得电梯完成接送所有乘客的运行时间最短,请你编写一个程序来进行电梯调度。
输入
输入文件的文件名为 input.txt
,其中:第一行为一个非负整数N
,代表乘客的请求数量;接下来N行,描述了这N个请求的信息,格式为请求时刻 起始楼层数 去往楼层
。
保证请求时刻
是递增的,且同一时刻同一楼层只会有一名乘客发出请求(也即不会出现同时且同楼层的多行输入)。
/*input example*/
2
0 1 2
1 2 1
输出
输出调度决策,输出文件的文件名为output.txt
,其中:每一行的输出格式为时刻 停靠楼层
。(初始时停在0层的状态不输出)
注意:“时刻”指的是在某层楼停靠的时刻,且不算入在该层的停靠时间。
/*onput example*/
1 1
3 2
5 1
作业要求
1.新建一个C++项目(名字取为Elevator-scheduling)。
2.在这个项目里添加一个Elevator类,用来描述电梯。
该类的成员变量和成员函数如下:(作为参考)
member:
- queue < int > destinationQueue; //目的地队列
- int currentFloor; //当前位置
- int indicator; //运行方向
function:
- goToFloor() //前往队列首的楼层
- stop() //停靠在当前楼层
- updateDestinationQueue() //更新目的地队列
5.在这个项目里新建一个cpp文件,在其main里面读取文件输入、创建Elevator对象以及输出等等。(本次作业旨在熟悉c++的类和对象以及文件读写,可暂不考虑调度算法)
6.写一篇随笔,附上类图,并描述整个过程中碰到的所有困难(卡在哪些地方),以及解决的过程。要求在博客开头贴出项目的github地址。
(类图可参考北航同学的优秀作业:http://www.cnblogs.com/HansBug/p/8694939.html)
测试说明
本次代码依然需要上传Github。代码必须遵循一定的代码规范,要有注释,可读性尽可能好。
提交到Github上的项目均需要建立一个名字为BIN的文件夹,里面必须含有可执行文件(以exe为后缀),相关的依赖库,以及输入和输出文件。请注意以下两点:
- 确保可执行文件的文件名为 elevator.exe,确保输入和输出文件的文件名为input.txt和output.txt。(注意:输入输出文件都需要采用相对地址,也即
./output.txt
) - 一个示例组织目录如下所示(仅为示例,命名、文件数量等未必需要遵守):
/ Elevator-scheduling
/ main.cpp
/ elevator.cpp
/ elevator.h
...
/ BIN
/ elevator.exe
/ input.txt
/ output.txt
/ Lib.dll (exe运行需要的动态链接库文件,可以没有)
注意:在下一次的作业中,将引入匿名互测。
互测规则如下:
- 每人有初始分数10分,由测试同学在此基础上对被测方做出相应的加减分。
- 测试方对被测代码运行测试用例,测出一个bug扣1分,自己获得1分(被测方最多扣至0分,测试方最多加到满分15分)。测试方需要提供hack用例。
- 如果代码规范有值得称道的地方,加分(最多不超过5分)。测试方需要提供加分理由。