寒假作业3

031602435 肖逸清

031602431 王源

设计思路

关于用户输入输出

  1. 对用户输入用字符串进行处理,处理了设想中的错误输入
  2. 用名为prompt的int型变量的值来决定用户收到的提示语言(1为中文,2为英文)
  3. 解题报告采用名为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. 对根节点特殊处理,保证至少一个数据域是子算式,从而生成“混合运算”。
  2. 对层数进行记录并限制,使算式不至于过于庞大
  3. 生成树后马上进行答案计算,保证算式的合法性,以及“答案是整数”的要求

编码规范

1.采用C++,每个类都有.h .cpp两个文件
2.使用Tab缩进,tab size =4
3.#define不需要的时候#undef之


程序实现和结果测试的截图

1093404-20170217115138613-343841534.png
1093404-20170217115148613-1903074138.png
1093404-20170217115158441-1244887185.png
1093404-20170217115234832-1785680314.png


github的提交链接和提交日志截图

git链接

1093404-20170217115308597-123279527.png
1093404-20170217115313207-1108203835.png


两位同学的分工和协作证据截图

1093404-20170217115403863-1335052863.png


合作过程

  1. 想出问题的解决思路(啊。。。因为刚开始没组队所以就自己想了hhh
  2. 学习git及github关于团队合作的内容
  3. 组队 讨论解决思路和编码规范
  4. 敲代码 完成Operation.h
  5. 写相关的一些"to-do list" "readme"
  6. 上传github让队友fork
  7. 敲代码 完成三个类
  8. 上传交给队友
  9. 研究编码问题
  10. 写这篇随笔的公共部分

合作体会

感觉 队友就是自己的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++新特性的补充

恩 就这样

转载于:https://www.cnblogs.com/circlek/p/6409223.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值