OO第一单元表达式求导作业总结
第一次作业
功能描述:
对输入的表达式进行求导计算和格式正误判断
思路:
一开始的想法是想写一个大正则找到一个通项式,通过这个多项式来判断WRONG FORMAT,结果发现正则写的总是不完善,会漏掉一些没用考虑到的情况,所以就先写一个非法空格可能出现的所有情况的正则

把带非法空格的表达式判断为WRONG FORMAT!
然后按照常数、带x的项,封装放入ArrayList动态数组中进行求导和合并,最后输出。
在处理爆栈的时候,使用了独占模式。独占与贪婪一样匹配最长。不过在独占量词模式下,正则表达式尽可能长地去匹配字符串,一旦匹配不成功就会结束匹配而不会回溯。一开始使用贪婪算法,结果输入的表达式超过1000字符后会爆栈,原因是正则表达式会尽可能长地去匹配符合规则的字符串,且会回溯。
匹配正则:

第一次作业的结构,没有理解到继承,简单的写了三个类,Deri类里放主函数,ComputePoly把表达式的每一项抽出放进Poly类里面,
在Poly类里面放置系数和指数。求导完再合并同类项。
类图:

在ComputePoly类中进行了封装,传进Poly类中进行指数,系数的匹配。
BUG分析:
Hack:
1. 判断完系数的空格格式错误之后默认判断了x的幂的空格错误格式,就是空格格式错误的情况没有考虑全。
2. 对于空格的判断过于特殊,应该是DeBug的时候只对这一个特殊样例进行了特判,导致输出错误。
被Hack:
(强测与互测均未出现bug)
第二次作业
功能描述:
在第一次作业的基础上加入三角函数求导
思路:
延续了第一次作业的风格,在原有的基础上加上了sin(x),cos(x)的判断和计算。
对于表达式里的每一项都可以构造一个带有系数、指数、正弦的指数、余弦的指数(每一项可以看成是常数*幂函数*正弦函数*余弦函数)
按照“*”来分割表达式作为每一项处理。

匹配正则:
与第一次作业相比多了三角函数的判断,不再赘述
BUG分析:
Hack:
1.在输出的时候错误的处理了幂为1的时候(^1),只是单纯的将”^1” replaceAll为””,
这就没有考虑幂的出现情况,导致了错误的输出。
2."/t"以及"/f"的判断过于特殊,导致格式判断出错。
被Hack:
在正则处理三角函数的幂时,没有构造足够多且复杂的测试集,并且因为使用大正则的原因,
并没有发现漏掉了+,导致幂只能匹配一位数 ,间接导致三角函数求导进入的判断语句错误。
第三次作业
功能描述:
对于三角函数()里可以带有常数、x的次方或者三角函数的嵌套。
思路:
改变了一下结构,用到了接口和继承,增加了一个父类,三个子类,存放不同类型的项,常数,幂函数,带三角函数

BUG分析:
Hack:
1. 递归处理进入死循环
2. 没有正确的处理嵌套,导致输出错误
3.括号表达格式错误
被Hack:
(强测与互测均未出现bug,笔者并没有进行任何性能化简)
BUG总结:
互测:
1.使用自己构造的测试集测试代码
2.阅读指导书,寻找边缘数据
3.阅读代码,找Bug
总结:
第一次第二次作业类与类之间并没有任何关系,第二次作业延续了第一次作业的风格,简单加入三角函数的判断即可,第三次作业用到了继承和接口,递归下降处 理表达式。自己的错误,在匹配表达式的正则里漏掉了+,导致只能测一位数的幂,而且我特别喜欢用大正则匹配表达式,写着写着就感觉有些情况没考虑到,就又得在正则里面修补,好在最后也没在这块摔跟头。不过研讨课的时候大佬们都推荐一种一种的匹配,还是有道理的,毕竟大正则很容易出错,检查起来还很不容易。
OO第一单元表达式求导作业总结的更多相关文章
- BUAA-OO-第一单元表达式求导作业总结
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...
- OO第一单元总结——求导
一.基于度量分析程序结构 (一)第一次作业 (1)设计思路 本次作业只涉及到简单幂函数通过加减运算而复合而成的函数,因此笔者自然的把函数分成了函数本体以及单个的项两个部分,在笔者的设计中两个类的功能如 ...
- 2019年北航OO第1单元(表达式求导)总结
2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化 ...
- OO Unit 1 表达式求导
OO Unit 1 表达式求导 面向对象学习小结 前言 本博主要内容目录: 基于度量来分析⾃己的程序结构 缺点反思 重构想法 关于BUG 自己程序出现过的BUG 分析⾃己发现别人程序bug所采⽤的策略 ...
- OO随笔之魔鬼的第一单元——多项式求导
OO是个借助Java交我们面向对象的课,可是萌新们总是喜欢带着面向过程的脑子去写求导,然后就是各种一面(main)到底.各种方法杂糅,然后就是被hack的很惨. 第一次作业:萌新入门面向对象 题目分析 ...
- OO第一单元
OO第一单元总结 目录 OO第一单元总结 前言 第一次作业 HW1基本思路 UML类图 代码规模 复杂度分析 方法复杂度 分析 类复杂度 分析 优化策略 第二次作业 HW2基本思路 UML类图 代码规 ...
- OO第一单元作业总结——表达式求导
OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...
- 2020 OO 第一单元总结 表达式求导
title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
随机推荐
- 03.Regression
01.regression # -*- coding: utf-8 -*- """ scipy 패키지 선형 회귀분석 """ from s ...
- UOJ#55. 【WC2014】紫荆花之恋 点分树 替罪羊树 平衡树 splay Treap
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ55.html 题解 做法还是挺容易想到的. 但是写的话…… 首先这种题如果只要求一棵树中的满足条件的点数( ...
- 使用httpclient访问NLP应用接口例子
参考网址: http://yuzhinlp.com/docs.html 接入前须知 接入条件 1.进入网站首页,点击注册成为语知科技用户 2.注册完成后,系统将提供语知科技用户唯一标识APIKey,并 ...
- HttpSession与JSESSIONID的"盗用"
https://blog.csdn.net/qq1437715969/article/details/75331652
- Zlib:error can't decompress data; zlib not available
查看:yum list |grep zlib* 看到的是全部都安装好的: 版本为1.2.3,现在要升级为1.2.11 卸载 [root@biluos1 zlib-1.2.11]# rpm –nodep ...
- 第二篇flask响应方式
响应三件套 1.Flask中的HTTPResponse @app.route('/home') # app中的route装饰器 def home(): # 视图 return '登陆成功' #HTTP ...
- 13树莓派手动安装Home Assistant
2017-09-05 00:53:02 https://home-assistant.io/docs/installation/raspberry-pi/ 已经安装步骤安装了带桌面的树莓派系统,在SD ...
- JAVA使用POI如何导出百万级别数据(转)
https://blog.csdn.net/happyljw/article/details/52809244 用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会 ...
- ECMA Script 6_简单介绍
ECMAScript 6 ECMA 组织 前身是 欧洲计算机制造商协会 指定和发布脚本语言规范,标准在每年的 6 月份正式发布一次,作为当年的正式版本 这样一来,就不需要以前的版本号了,只要用年份标记 ...
- ValidateCode源码
ValidataCode.java: package com.itcast; /** * @author 大汉 */ import java.awt.Color; import java.awt.Fo ...