结对项目

| 这个作业属于哪个课程 | 22计科12班 |
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 实现一个自动生成小学四则运算的程序 |

姓名与学号
| 王展锐 | 3122004665 |https://github.com/r12-7/3122004665 |
| 达仁·江布尔 | 3122004420 |https://www.cnblogs.com/daren19 |

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
·Estimate · 估计这个任务需要多少时间 30 15
Development 开发 180 210
· Analysis · 需求分析 (包括学习新技术) 120 80
· Design Spec · 生成设计文档 10 10
· Design Review · 设计复审 10 5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 5 5
· Design · 具体设计 20 30
· Coding · 具体编码 60 30
· Code Review · 代码复审 30 20
· Test · 测试(自我测试,修改代码,提交修改) 60 120
Reporting 报告 60 50
· Test Repor · 测试报告 20 20
· Size Measurement · 计算工作量 20 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 20
· 合计 685 645

效能分析
效能分析

代码覆盖率

函数设计与实现
函数作用

函数名称 函数作用
CreateFormula() 随机生成四则运算式子,包含真分数
OptiExpression() 根据后缀表达式将其转换为二叉树的形式,方便后面判断是否重复并且防止出现负数
AdjustmentTree() 按规则优化二叉树,使其计算过程中不出现负数,并且中序遍历,生成查重使用的表达式,进行查重处理
TreeToExpression() 将二叉树重新转换为后缀表达式
SwapChildTree() 交换二叉树的左右孩子
calculate() 根据后缀表达式计算出结果
transform() 使用将中缀表达式转化为后缀表达式

关键函数
CreateFormula():生成 n 个包含随机操作符(+, -, *, ÷)、随机整数或分数的算术表达式。每个表达式可能包含括号来改变运算优先级,操作数的值在 1 到 m 之间。

OptiExpression():将算术表达式转化为二叉树,并对这棵树进行优化和表达式转换。

getCheckResult():计算题目的正确条数

calculate():计算

transform():表达式转换

测试



可能出现的异常以及解决方法
表达式解析错误:使用 expression.split("") 进行字符串拆分,这会将表达式逐字符拆分,例如 "12+34" 会变成 ["1", "2", "+", "3", "4"]
解决方法:使用正则表达式或 StringTokenizer 来正确解析操作数和操作符,避免将多位数字拆分开。例如,可以用 split("(?<=[-+/÷])|(?=[-+/÷])") 来正确分离操作符和操作数。

括号匹配不当:生成二叉树时,如果表达式中有括号,但括号不成对或顺序不对,可能会导致解析错误或生成错误的树结构。
解决方法:在解析表达式时,检查括号的匹配情况,确保左右括号数量一致,可以使用一个计数器来确保括号成对。

操作符处理缺陷:在操作符处理时,连续多个操作符或分隔符(如 "++", "--")会导致栈中的状态不一致。
解决方法:对于多个连续的操作符,加入判断,跳过多余操作符,或通过正则表达式处理特殊情况。

项目小结
1.结对编程需要考虑代码的可读性。团队协作当中,代码需要成员之间相互理解,制定一些标准,在必要的地方给出合适的注释是非常有必要的。
2.要合理分配工作,发挥团队效益。结对编程需要有合理的分工,发挥团队作用,提高彼此之间的沟通能力和团队协作能力,这些是个人编程所欠缺的。
3.兆康的资料搜索能力较强,但是python语言需要再系统学习一下。华健算法的设计思维较好,但是编码能力和成员沟通能力还需强化。

posted @ 2024-09-25 22:33  r12z  阅读(44)  评论(0编辑  收藏  举报