设计思路
关于用户输入输出:
- 对用户输入用字符串进行处理,处理了设想中的错误输入
- 用名为prompt的int型变量的值来决定用户收到的提示语言(1为中文,2为英文)
- 解题报告采用名为wrongquenum的数组来存储用户的错误题目编号,在最后通过for循环将错误题目呈现出来。总结用名为corrnum的int型变量存储正确题目数量,wrongnum存储错误题目数量。
算式生成:
一个算式由符号和前后“数据域”构成,由此,采用二叉树来建构算式。然后结合随机生成数的算法来随机生成一个算式。
class TreePoint{
private:
TreePoint *prep;
TreePoint *next;
char symbol;
int priority;
int rightpriority;
Fraction *num;
char newsymbol(int upper);
……
};
算式 计算:
算出前“数据域”和后“数据域”的值,然后根据符号算出算式的值。整个计算采用递归的方法对二叉树进行中序遍历
算式 输出:
同样采用递归的方法对二叉树进行中序遍历。对于括号的解决采用优先级的方式。一个数的priority及rightpriority均为4。rightpriority用于“解决减号的后运算域是加号或减号”的情况及类似情况。一旦遍历的时候发现优先级掉落(例如'*'的前数据域出现加法),就增加括号(只在输出时)。
switch (symbol)
{
case '+':priority=1;rightpriority=1;break;
case '-':priority=1;rightpriority=3;break;
case '*':priority=2;rightpriority=2;break;
case '/':priority=2;rightpriority=3;break;
}
关于数:
用Fraction类进行存储,将整数和真分数全部视为分数,overload四则运算、逻辑等于。
class Fraction{
private:
int nume;// numerator
int deno;// denominator
……
};
关于其他要求:
- 对根节点特殊处理,保证至少一个数据域是子算式,从而生成“混合运算”。
- 对层数进行记录并限制,使算式不至于过于庞大
- 生成树后马上进行答案计算,保证算式的合法性,以及“答案是整数”的要求
编码规范
1.采用C++,每个类都有.h .cpp两个文件
2.使用Tab缩进,tab size =4
3.#define不需要的时候#undef之
程序实现和结果测试的截图
github的提交链接和提交日志截图
两位同学的分工和协作证据截图
合作过程
- 想出问题的解决思路(啊。。。因为刚开始没组队所以就自己想了hhh
- 学习git及github关于团队合作的内容
- 组队 讨论解决思路和编码规范
- 敲代码 完成Operation.h
- 写相关的一些"to-do list" "readme"
- 上传github让队友fork
- 敲代码 完成三个类
- 上传交给队友
- 研究编码问题
- 写这篇随笔的公共部分
合作体会
感觉 队友就是自己的deadline 因此工作效率特别高就怕自己拖进度
刚开始的时候没构思好导致最表层的类"Operation" class 重构了一次 所以也就没敢叫队友先按Operation里的东西写main.cpp
事实是Operation果然又改了一次。。。一开始二叉树结构设计上我的锅。。。我的二叉树一开始是没有treepoint的(捂脸
所以我们的开发并没有“同时进行”
第二个体会就是 有队友的感觉特别爽hhh 就是不是这么大一个程序都得自己去做自己去测试
有队友在工作量感觉减少了许多
恩 感谢下我的队友 @daydreams
就酱紫
尚存在的问题——“编码问题”
刚刚拿到老师的编码解决方案还没有尝试,将会进行尝试
后记 2017.02.13
好了终于到后记部分了(雾
拿到题目觉得略微眼熟的我默默把blog往下翻了一些,然后就发现了什么的样子(划掉
当然要自己想才好玩啦 然后就开始想(瞎扯结束
之前不知道在哪里看过由此冒出来的一个概念“前缀表达式”,忘得差不多了于是查了出来
前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。为纪念其发明者波兰数学家Jan Lukasiewicz,前缀表达式也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。
前缀表达式除去了括号 这不正好吗 于是顺着这个思路想下去的我 发现 。。。怎么生成还是个问题
于是我放下来先想计算。。。然而还是不好做
于是我先想输出。。。无果
于是甩甩头重整思路,终于发现了算式是“A+B”的结构
于是思路就出来了
恩。。。然后写代码是很快啦。。。
接下来要做的有目前还有的编码问题 以及GUI版本 还有C++新特性的补充
恩 就这样