结对编程的目标
设计一个课堂抽点的算法,该算法要尽可能地增加有效点名,有效点名是指:在一次点名中,假如同学A缺课,而刚好抽点到他,则称为这一次点名请求为有效点名。
参数定义: 请求次数:定义在一次点名中,获取一位同学是否到达课堂的情况为一次请求。 有效点名:一位同学缺席该课程的一次课,算法在这次课上抽点到该同学,视为一次有效点名,一次课可包含多次有效点名。 评价标准: 培养团队精神 锻炼与他人合作讨论和思考问题的能力 锻炼编程能力,学习新的编程知识
结对完成作业所用的时间
从构思得到一步步落实代码,几乎每天都花至少三个小时,并且持续了一周,合计大约25个小时
作业完成度与算法评测
作业按时完成了,但社区博客内容还有待进一步改善并且算法没有考虑老师建议的辅助搜索信息,也算是没有按量完成吧。 最终算法得出的E值最高只有0.5左右,也算是比较低的了,因为看了一下其他组的E值都有0.7多
结对完成作业的过程遇到问题及解决方法
问题
使用C++对文件进行读写操作时无法准确读写自己想要的内容。 使用(int)str进行类型转换时,程序报错提示无法实现字符串变量到整型的转换? 引用另一个工程文件的类并且对类进行了修改时,运行就出错了,还死活不知道什么原因。 怎么让两个有包含关系的集合元素的内容实现同步? 对集合进行erase剔除操作时,怎么样才能避免迭代器越界问题。
解决方法
经过查看学习C++的笔记和测试尝试,直接使用>>运算符对文件进行读取可以自动以空格为分隔,只有想要的内容1和内容2之间在文件中用空格隔开,就能轻松读取文件想要的内容了。 直接百度,发现C++有现成的string到int的转换的函数,即atoi(s.c_str())->返回的就是s的整型形式。 在写点名系统的查询时,因为也要使用数据生成程序中的类型,然后就直接导入了数据生成程序的类文件,不过还好在经过几个小时后悟了,回宿舍就直接重写了类,然后就没事了。 经过和队友的讨论,想到了把作为子集的容器内容改为指向原容器内容的指针,这样子就可以实现元素内容一致性了 使用迭代器对容器进行erase操作时,迭代器会改变,使用要格外小心,然后当时在网上找到了解决方法,如下代码`在这里插入代码片
for ( auto it = this -> notComeStu. begin ( ) ; it != this -> notComeStu. end ( ) ; ) {
if ( ( it-> getNotComeCnt ( ) <= 1 ) ) {
it= this -> notComeStu. erase ( it) ;
}
else {
++ it;
}
}
收获
与队友一起经历了思考解决问题的充实时光。 掌握了C++中atoi(s.c_str())函数的使用。 掌握了在用迭代器对集合erase操作时如何避免越界的方法。 掌握了使用git将文件推到github仓库的语法。
若是第一次使用则要先把github的仓库克隆到本地,做法:在本地新建一个文件夹,在文件内右键点击git bash here,在bash窗口内输入git clone github上复制的ssh地址,回车,把github仓库克隆到本地。 把需要推的对象复制到上面所克隆下来的文件夹内,然后右键点击git bash here,第一次推时要先输入git init,之后就可以不用inti了,然后git add . 回车,再git commit -m "需要加的备注"回车。 最后git push origin main回车即可。 最重要的是从这次结对编程中我找到了自己在编程这方面的乐趣,那就是思考与实现的过程。