1.简单多项式求导

第一次作业的难点,我认为是对输入的预处理,尤其是正则表达式的使用。这次作业的思路是:首先将表达式进行预处理,(由于题目中要求不会有空格产生的WF,所以可以放心大胆的消除空格)。

消除空格之后进行表达式的解析,主要分为表达式的判断,以及对指数以及系数的存储,将指数以及系数分别放在两个容器里。

解析之后是求导运算,我这里采用的方法是将容器里的数字进行操作,最终得到新的系数与指数。

最容易卡bug的地方是表达式的输出,一不小心,有些地方优化的时候忘记考虑,就会在户厕中gg。

下面是第一次作业中我使用的类图。

2.较为复杂的多项式求导

第二次作业的难点,在于对WF的判断,对cos,sin的求导,以及乘积法则的使用。

WF的判断:由于错误类型比较多,而且不可胜数,所以我在这里采用的方法是只判断正确的输入。用一个超级大正则判断输入是否是正确的输入。如果不是直接WF出局,程序结束;如果是的话,再进行预处理等一系列活动。

对cos,sin 的求导,这里我采用的方法是 只分析其指数,将其系数看作是一个新的项进行操作,这样的好处就是减少了cos,sin 单独求导的难度,使得代码更加简洁以及清晰。

乘积法则的使用,我这里的处理牺牲了优化确保正确度,所以只使用了最基础的优化。因为乘积法则,所以我采用的思路是:将每一项都存在一个String容器里,将每一项的导数也都存在一个String容器里,在求导时按需找出元素,进行相乘操作即可。

下面是第二次作业的类图。

3.函数嵌套的求导

这次的作业主要是正则表达式的匹配。我采用的方法是:参考往年代码,获得思路。(在很多时候,一个人的想法会很不成熟,借鉴往年的代码,从老师同学那里获得帮助,从中找到思路,但又不抄袭,我认为也是学习过程中不可避免的一个环节。)

下面是这次作业的类图。

4.bug分析。

添加了一个bug分析,帮助未来的学弟学妹们进行debug。

第一次作业:bug 主要集中在print 类的特殊情况考虑上,最典型的数据是:-x**-1  ,x**-1 这两组数据上。

第二次作业:bug 主要集中在符号处理上,最典型的代表就是符号重复处理(求导的时候处理了一次,输出的时候又处理一次),后来经过一下午的优化,才将自己发现的bug全部找出来。

第三次作业:由于参考了往届的优秀代码,所以bug明显减少。

5.一些感受

emmmmmmm,感觉压力还是有的,希望自己能改掉拖延的习惯,每次OO作业一下来就抓紧时间完成,不要拖到DDL,这是最重要的一点。

还有就是感觉对“面向对象”思想,加深了一点点的认识。

BUAA_OO 第一单元总结的更多相关文章

  1. BUAA_OO第一单元作业总结

    BUAA_OO第一单元作业总结 单元任务 第一单元的任务为实现表达式的求导,其中第一次作业是对简单多项式的求导,第二次作业是对包含简单幂函数和简单正余弦函数的多项式的求导,第三次作业是对包含简单幂函数 ...

  2. BUAA_OO第一单元总结

    OO第一单元总结 目录 作业总体分析 代码结构分析 遇到的bug问题    找到bug的方法 结语 一.作业总体分析 尽管这个单元三次作业都是表达式求导,但我认为每次作业的侧重点是不同的. 对于第一次 ...

  3. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...

  4. OO第一单元作业小结

    前言 第一单元的主题是表达式求导,第一次作业是只带有常数和幂函数的求导,第二次作业加入了正余弦函数,第三次作业又加入了表达式嵌套,难度逐渐提升.总体来说前两次作业还易于应对,而第三次作业做得相对有些艰 ...

  5. BUAA面向对象设计与构造——第一单元总结

    BUAA面向对象设计与构造——第一单元总结 第一阶段:只支持一元多项式的表达式求导 1. 程序结构 由于是第一次接触面向对象的编程,加之题目要求不算复杂,我在第一次作业中并没有很好利用面向对象的特点, ...

  6. 2019_BUAAOO_第一单元总结

    前言 OO第一单元共有三次作业,分别为多项式求导.带有三角函数与幂函数的表达式求导.带有嵌套表达式因子的表达式求导.虽然这三次作业都离不开求导,可是每次作业的复杂度都是大大递增的.对于习惯于面向过程编 ...

  7. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  8. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  9. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

随机推荐

  1. 《Mathematical Analysis of Algorithms》中有关“就地排列”(In Situ Permutation)的算法分析

    问题描述 把数列\((x_1,x_2,\cdots,x_n)\)变换顺序为\((x_{p(1)},x_{p(2)},\cdots,x_{p(n)})\),其中\(p\)是\(A=\{1,2,3,\cd ...

  2. 读者来信 | 如果你家HBase集群Region太多请点进来看看,这个问题你可能会遇到

    前言:<读者来信>是HBase老店开设的一个问答专栏,旨在能为更多的小伙伴解决工作中常遇到的HBase相关的问题.老店会尽力帮大家解决这些问题或帮你发出求救贴,老店希望这会是一个互帮互助的 ...

  3. B【USACO 2015 Jan Gold】牧草鉴赏家

    时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝 ...

  4. Metrics:如何让线上应用更加透明?

    1. 上期我们结合<SRE Google 运维解密>,对监控系统进行了一次脉络梳理,知道一旦离开了监控系统,我们就没法辨别一个服务是不是在正常提供服务,就如同线上的服务在随风裸奔. 文章分 ...

  5. implements Serializable

    implements Serializable 1. 序列化和反序列化 序列化: 把对象转换为字节序列的过程称为对象的序列化. 反序列化: 把字节序列恢复为对象的过程称为对象的反序列化. 在Java和 ...

  6. ML-Agents(六)Tennis

    目录 ML-Agents(六)Tennis 一.Tennis介绍 二.环境与训练参数 三.场景基本结构 四.代码分析 环境初始化脚本 Agent脚本 Agent初始化与重置 矢量观测空间 Agent动 ...

  7. php 直接跳出嵌套循环

    break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行. break 可以接受一个可选的数字参数来决定跳出几重循环. <?php $arr = ...

  8. 浅谈RPC与Http

    什么是RPC,RPC原理是什么? 什么是RPC? RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.比如两个 ...

  9. 课程登记窗口java

    设计窗口,实现课程的登记,并且将相应的数据写入文件之中.保证的是课程名称不可以重复,对于任课老师必须是在已经设定好的五位老师之中.并且上课地点也是在预先设定的范围内.窗口可以持续进行保存,数据将在判断 ...

  10. flask-include、set、with、模板继承

    flask-include.set.with include: 跟django的include类似,将一个html的代码块直接嵌入另一个html文件中 {%   include    'html    ...