第四次作业——结对编程

|
--- | ---
Github项目地址 https://github.com/TheFatInsect/WordCount.git|
结对伙伴的作业地址 https://www.cnblogs.com/Redwarx008/p/11667362.html|
|

一.结对的过程

我和结对队友贾鸿椋是室友而且我们俩的桌子紧挨着所以交流沟通起来特别方便,而且我们都有一些不错的想法和共同的意见所以就很顺利的结对成功。由于我们俩的想法是共同的,但出于个人原因我选择了C而他选择了C++ 所以我们的代码是由个人独立完成的两份cpp文件,但我们在写完代码之后互相查看了对方的代码并且听对方讲解了自己代码的各个部分以及功能实现原理,并进行了很久的经验交流,所以还是有很大的收获的。

二.PSP表格

uj7cFK.png

三.解题思路描述

1.初步思考

本次作业要求设计一个wordcount的命令行程序 与以往作业要求不同 本次作业是通过cmd命令窗口调用exe文件 对一txt文件进行检索然后输出统计的文件内容。首先要实现基本功能:①统计文件的字数②统计Ascii字码2 不考虑汉字③统计空格 水平制表符 换行符 均算字符④英文字母⑤词组。然后需要对程序进行一系列的单元测试 效能分析以及数据可视化部分的检测。最后还有程序的附加功能“用户交互界面绘制”即:a.支持两种导入单词文本的方式:导入单词文本文件和直接在界面上输入单词并提交。b.提供可供用户交互的按钮和,实现多个参数的功能,对于异常情况要给予用户提示。c.将结果直接输出到界面上,并提供导出按钮,将结果保存到用户指定的位置。代码部分的要求就是这些,需要完成的功能不算很多,只是通过cmd运行exe的方式是第一次接触,也不算太难,多多尝试多多学习还是可以解决的。

2.查找资料

浏览CSDN等网站还是能发现很多在不同编译器环境 用不同种语言写出来的各种各样的wordcount命令行程序的。最后参考博客园部分其他高校优秀学生作业,开始了本次作业的编码工作。

参考链接:https://www.cnblogs.com/miaobo/p/9696026.html

https://www.cnblogs.com/xiaobao123/articles/9649687.html

四.设计实现过程

1.代码部分整体思路

根据博客作业要求,基本功能方面要求统计单词word、字符character以及行数line的数据情况,所以创建了三个函数分别用来求word、character和line的数据统计。三个函数功能相近,写的时候有很多共同点,比如“如何判断数据读取是txt文件中的最后一位”、“如何将数据导出再导入到result文件”和“用sum_words等值来记录总数”所以基本上写完一个函数模型,剩余的直接改一些参数的名称就可以完成了。基本功能的思维导图如下:

uvKzuD.png

五.我们制定的代码规范或链接

在代码审查过程中发现的问题:由于编译器环境问题 在不同vs版本下代码运行会出现不同的报错以及警告错误,所以我们查阅了相关资料,发现在头文件部分增加一些代码语句可以删除此类非必要错误,也就是对程序的影响几乎没有,但是有这个错误程序就无法运行的错误问题,从而使程序运行起来观察具体的执行情况。

ujLwh6.png

六.记录在改进性能上所花费的时间

改进性能1:删除一些不必要的循环体 变量设置以及重复的文件读写操作的简化。性能分析图如下:

(1)CPU性能分析:由于输入txt文件中数据较少 几乎没有占据CPU的空间

uXMCHs.md.png

uXMiEn.png

uXMabd.png

(2)外部代码调用情况:由于使用C语言编程,整个cpp文件都是由函数的组合而成 所以函数部分的调用量占到了100%。

uXM14x.png

(3)GPU性能分析:和CPU性能分析类似 在Intel(R) Core(TM)i7-8750 CPU@2.20GHz 2.21GHz的环境下运行程序,基于txt文件中所输入数据的情况,GPU占用情况如下。

uXMYvD.png

七.代码说明

1.head file && main function

head file调用了三个 都是一些很常用的头文件。main function部分由调用三个检索功能的函数构成。

uXMwVA.png

2.三个功能实现函数

(1)record_words

该部分函数编码时需要注意“结束位置的判断”,因为word可以是多个构成的 所以一次空格不能判断word的读取结束 应该判断多次后才能确定word全部读取完 从而以防数据遗漏。

uXM0UI.png

uXM6xS.png

(2)record_chars

同record_words函数类似 结束位置的判断是关键。完成record系列一个函数之后 剩下函数的编码就很简单了

uXM7xU.png

uXMqr4.png

(3)record_lines

uXMXZ9.png

3.通过cmd命令行调用exe的结果

ujTKD1.png

八.心路历程与收获

1.编写代码能力欠缺 掌握语言太少

本次作业要求C#完成 但由于未能熟悉掌握C#相关应用,还是选择了最基础的C来完成。那相应的难度以及繁琐度就会上升很多,浪费了很多时间在机械的语句编写 语法错误审查上面,效率很低。虽然在指导方案的安排中,目前为止已经学了C和C++,但自己不能完全靠老师手把手的教来获取知识,学习技能。既然选择了计算机行业,自己动手的能力一定不能欠缺了,所以打算一定抽时间自学一下现在比较热门的python等语言来开阔自己的视野领域,增长一些见识。

2.结对编程的重要性

“1+1>2”是必然的,只要两个人目标一致并且付诸努力。在结对的过程中,很多困难如果像以前一样自己去一点点的解决,需要多付出的时间代价是难以想象的,很多时候自己模糊的区域说不定结对伙伴刚好擅长,那就是一种很好的良性互补,非常有利与双方的发展。其次就是结对伙伴之间的互查纠错部分也非常非常重要。“近朱者赤 近墨者黑”“旁观者清 当局者迷”我们自己编写的代码的一系列的问题 我们肯定是难以完完全全排查出来的,这个时候互查的效果就非常明显了。通过互相排查既能帮助对方改善问题,又能给自己提个醒,警示自己以后自己在编码的过程中不要出现类似的问题。总体来说,有个与自己很匹配的结对伙伴是非常有利于个人技术优化与个人技能提升的。

3.多浏览开发者网上家园系列网站

本次作业我觉得最有意义的一个收获就是:浏览CSDN、博客园等开发者网站能收获很多意料之外的东西。最初拿到项目作业的时候,毫无头绪,然后写程序的前几天就一直在查找各种版本的wordcount,看了好几种写法,慢慢的有了自己的想法以及自己想去尝试的功能,然后才迈出了第一步。但之后的编码过程也挺艰难的,中途程序各种报bug,有多次我都感到厌烦不想继续写了,下来之后自己再去看社区最后还是将bug一个个的都解决了。程序通过编译的那一刻,真的是太爽了,感觉之前所有的功夫都是值得的。所以,不会一定要自己多动手多向他人学习,我想这也是隐性的一种结对编程吧。

讨论时的记录

uvLlRK.png

posted @ 2019-10-14 13:18  TheFatInsect  阅读(176)  评论(2编辑  收藏  举报