【结对项目】4. 编码阶段(对项目第1阶段和第2阶段)

编码阶段

代码规范

google开源项目风格指南——C++风格指南

https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/

发给组内成员都看了。。尽量按照这个标准写吧

 

编码过程

这次是结对(实际上是3个人)编程,所以和之前的个人编程有了一些不同的地方

首先是先做了分工,一共4个类,其中QuestionGenerator和QuestionCalculator是做主要工作的类,其他两个类Fraction和Question类的内容稍少些,我负责Fraction和Question两个类,其他两人各负责生成和计算类。不过其他两个类的代码我也看过...

Fraction类

就是分数的计算,约分。分数计算很简单,分子分母的运算

约分,用的是暴力搜因子的算法(之前没有乘方,以为数不会很大,加了乘方之后发现会浪费很长时间在约分里面的循环里。甚至,数有时候可能会越界,就成死循环了),所以为了避免这种情况,增加了溢出判断,出现负数,或者分子分母大于10000,则直接停止计算,返回-1。因为本身四则运算也不应该涉及到这么大的数字,所以不会对需求造成影响。

Question类

生成或计算的函数通过调用QuestionGenerator和QuestionCalculator类的接口函数来实现。

其中生成函数中包含了保存生成的算式到文件的代码。

QuestionGenerator类

具体过程是

(1)根据设置生成算式:

根据随机数,和设定的算式长度、运算符出现概率,生成不带括号的算式。再根据括号生成概率,再在算式基础上加成对的括号,要求括号间只能是包含或者相离的关系。

(2)判断算式是否和之前生成过的所有算式重复 IfSame():

先对刚生成的该算式,将中缀转后缀,然后用后缀表达式,利用栈,进行计算的过程。计算过程中将出栈的每对操作数、和最后栈顶的操作数,保存到Question类中的存储中间结果的数组中,以后就不用再算了。

完成这之后,遍历之前生成的每个算式,判断这些每对中间结果是否都和刚生成的题一样,如果都一样则重复,有不同的则一定不重复,直接返回不重复即可。

(3)判断生成的问题是否太难 IfTooHard():

因为已经保存了刚才的操作数,则可以方便的判断每步运算的难度。设置了每步的运算不能出现负数,且每步运算的分子或分母都不能超过300。 要做到这点,在保存的中间结果中检查是否每个中间结果都满足此要求即可。

QuestionCalculator类

先中缀转后缀,再利用堆栈求解后缀表达式的值

中缀转后缀具体过程:(用了一个栈)

1)如果遇到操作数,我们就直接将其输出。

2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。

3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。

4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "。

5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

 

编码阶段中对类的设计的调整

在编码过程中有些类的设计又做了调整:

Fraction类:

增加了将分数类转换为字符串的操作(ToString()函数),方便其他类生成或计算时直接调用

Question类:

增加了返回某道题中缀表达式的接口函数,因为最终的main函数里会用到

QuestionGenerator类、QuestionCalculator类:

增加了具体实现过程中用到的函数,比如中缀转后缀的函数、计算后缀表达式的函数、判断题目是否重复、是否太难的函数

 

团队编程中版本管理工具Git的使用

从只会基础的拉取(pull)和提交(commit然后push)操作,到后来遇到了两个人同时编辑一个文件,一方提交之后,我这提交不上去的情况。然后学会了merge等有用的操作。

git感觉就是给团队用的,现在体会到了使用git之后代码管理的方便,可以每个人同时进行自己部分的编码,然后再进行整合。提高了效率

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值