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思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
随机推荐
- centos7安装elasticsearch
[root@aaron tools]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zi ...
- 圆周率pi π 与 角度的对应关系
圆周率pi π 与 角度的对应关系 π 180° π/2 90° π/4 45° π/6 30°
- JavaEE 之 后台验证+拦截器
1.Validator后台验证 a.在web.xml中配置 <listener> <listener-class>org.springframework.web.context ...
- BZOJ.4299.Codechef FRBSUM(主席树)
题目链接 记mx为最大的满足1~mx都能组成的数. 考虑当前能构成1~v中的所有数,再加入一个数x,若x>v+1,则mx=v,x不会产生影响:否则x<=v+1,则新的mx=x+v. 对于区 ...
- Everything at Once
Everything at Once As sly as a fox as strong as an ox ♥ sly 英 [slaɪ] 美 [slaɪ] adj. 狡猾的:淘气的:诡密的 比较级 s ...
- jQuery 对象 等操作
/////////////////////下面为文件夹重命名功能区///////////////////////// $(".wpul .rename").click(functi ...
- windows与linux之间文件的传输
这边记录一下如何在windows与linux之间进行文件的传输,下面是具体的网址. 原文地址::http://blog.csdn.net/shufac/article/details/51966276 ...
- vue_条件渲染_v-if_v-else_v-show
data: { ok: true flag: false } 1. 成对出现的 v-if 和 v-else 原理是: 标签的删除与重新创建 ,有些情况必须用 v-if <p v-if=" ...
- jq三级联动
test.html <div class="a_list"> <div class="a_title">商城分类:</div> ...
- linux locate命令
1.命令简介 locate(locate) 命令用来查找文件或目录. locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/ml ...