四则运算实验

这次实验的主要要求参考链接:http://www.cnblogs.com/HQL0301/p/7502315.html

博客主要介绍程序的思路、重点功能的实现方法和一些自己的想法吧

 

一、思路:

  实验主要要求是随机生成不重复的四则运算题目,然后给出答案供学生作答。我的实现思路是:

    1. 生成中缀表达式

    2. 将中缀表达式转换成后缀表达式

    3. 用后缀表达式建成二叉树

    4. 通过二叉树查重

    5. 通过后缀表达式计算

   姑且放上我的粗糙的运行结果:

  

 

二、重点功能的实现方法:

  1. 中缀表达式的生成:

    (1)生成一个最初式,例如1+1

    (2)随机生成算式的项数

    (3)根据(2)生成的项数循环添加项

    (4)每次添加的过程中,随机判断是否加上括号、是不是分数等

  2. 中缀转后缀 & 后缀建树 & 计算

    这两个功能主要是对栈的应用,是一个挺基础的东西,这里就不再赘述

  3. 查重:

  建立二叉树的原因,就是为了查重。四则运算的重复无非是交换律造成的,所以在生成二叉树的时,加上一些规则,让式子就算移项了,生成的树也是相同的,那么只要最后遍历比较树是否相同就可以判断式子有没有重复了。

   这个规则也不是什么神秘的东西,规则的核心,是比较树的子节点,当两个子节点不同的时候,规定哪一个在左边,哪一个在右边。目前,对于只有3个运算符的式子,只有下面这几种情况:

  (1)子节点都是数字,那么规定大(小)的放在左边,小(大)的放在右边

  (2)子节点一个是数字,一个是运算符,同上规定一个固定的位置

(3)子节点都是运算符,那么在三个运算符的式子中,这两个运算符的子节点一定都是数字,那么就分别比较这两个运算符的左子树和右子树,根据结果规定一个固定的位置即可

三、我的想法:

  1. 首先说一下这篇博文,我不想在博文中放上我的代码,一个是因为我的代码很乱,可以说很不优雅,这个主要是因为前期没有做一下规划直接就开始码代码,还有就是调整的工作量我认为无异于把代码重新打一遍。以及我觉得,四则运算的实现本身不是什么困难的事,主要是其中的思想,怎么让生成的算式更实用,生成更有效率。

  2. 如果想把这个实验性的项目改成真正可用的项目,那么有亲和力的界面和更良好的生成系统无疑是必要的。所以我在下面表达一下我现在的想到的几个问题。

  3. 一个是查重,从数学的角度上来看,3+2+1和1+2+3确实不是同样的式子,不过,毕竟这个题是出给人做的,如果同一张考卷里出现了这两个式子,那这张卷子一定是不合格的。所以在现实中,我觉得可以认为1+2+3和3+2+1是相同的题目。

  4. 还有一个问题是,题目要求的是三个运算符,那万一是更多的运算符呢,虽然没有做过模拟,不过如果按照我的第3条想法的话,更多的运算符下,继续实用二叉树,可能会存在运算效率和编码的复杂度的问题。

  5. 最后是一点建议,因为涉及到分数和整数的混合运算,所以,在计算的时候,可以把所有的整数都看成分数,这样可以减少一点代码的复杂度,运算效率也不会下降太多。

PS:以上的一些想法其实没有经过什么实践证明,只是我瞎想的,想法是不是真的正确要等下次再做四则运算的项目的时候才能验证了。

posted @ 2018-04-02 15:48  谢锦鸿  阅读(143)  评论(0编辑  收藏  举报