2017《面向对象程序设计》寒假作业三

031602435 肖逸清

031602431 王源

设计思路

关于用户输入输出

  • 对用户输入用字符串进行处理,处理了设想中的错误输入
  • 用名为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
……
};

关于其他要求

  • 对根节点特殊处理,保证至少一个数据域是子算式,从而生成“混合运算”。
  • 对层数进行记录并限制,使算式不至于过于庞大
  • 生成树后马上进行答案计算,保证算式的合法性,以及“答案是整数”的要求

编码规范

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

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

中文
英文
e存在
错误运行结果


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

github链接
1
2


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

协作截图


合作过程

开始的时候我们确立了大概的思路,然后开始学习github协作的相关事项。然后我们各自确立任务,开始实现一个个功能。在我敲代码的过程中出现过不少问题,也发现自己知识储备不够,所以我是边学边敲,感觉拖慢了进度,很不好意思
。。。最后我在写完main函数,在编译时出现了许多bug。。。其中有几个我发现自己解决不了,多亏了王源同学的帮助。。。王源同学之后还对界面做了调整,看起来更加美观。再一次王源同学的帮助(鞠躬)。


合作体会

  • 感觉有了队友就有种责任感,因为怕拖后腿所以感觉效率高了不少。
  • 这么多代码如果是我一个人肯定要花大量时间,所以有队友可以减少很多工作。
  • 有一个厉害的队友感觉很棒,可以从他那里学到很多东西。
  • 由于我一开始考虑不周,没有想到用户在选择提示语言时乱输的问题,还好最后队友注意到了这一点,加了一条语句。也是我想当然地认为用户会遵守提示操作,所以没有去想用户给出了不符合要求的输入该如何处理。。今后会注意这点。

最后感谢队友王源同学

原文地址:https://www.cnblogs.com/daydreams/p/6411912.html