计算多项式的值c++语言程序,课内资源

一、 实验环境

1.1 编程语言和开发工具语言采用ANSI C++(C++11)

开发工具:vim,g++,git,Visual Stdio(用于生成exe文件)

1.2 编码规范

编码规范中所有没有涉及到的内容,参见googlestyle C++

类名

类名采用开头大写的方式命名

变量

局部变量采用小驼峰法命名

类私有和保护的成员变量末尾加下划线

类公用变量命名同局部变量

函数

函数采用大驼峰命名法命名

类的私有成员函数末尾加下划线,如 voidshrink_();

get/set/isXXX等函数采用开头小写get/set/is,其后接开头大写单词的方式命名.如isValid, setName

其他

常量采用字母k + 大驼峰命名法命名。但类中的const变量依旧采用类变量的方式命名

类型名称(typedef)采用下划线命名法命名。单词最后加_t。如name_t

左大括号“{”与前一语句在同一行

二、分析与设计

2.1 需求分析系统储存多项式

多项式相加

多项式相减

多项式与常数 数乘运算

多项式代入某点求值

系统显示储存的多项式

显示帮助

2.2 系统功能图

8f1313ce7044a8af4a56b34bbf91d8e3.png

2.3 类结构设计

2ee18289099a9efeec248cb8f309232f.png

2.4 细节设计

以下+表示public,-表示private,#表示protected

以 [+-#] operation(type param) : return-type

或 [+-#] attribute : type等形式给出。self代表类本身(Polynomial)

接口设计:

+typedef vector coefficient_t;

+typedef Polynomial self;

+Polynomial(string); // 构造函数,对输入作parsing。输入应形为”(1, 3)(2, 4)(4, 6)”

+operator rel(const self&) : bool //关系运算符。rel 为 == 与 !=,判断两个多项式是否相等。

+operator op(const self&) : self //运算符。op为+,-,*中的一个

+operator op(const self&) : self& //运算符。op为+=,-=,*=中的一个

+operator op(double) : self //数乘运算符。op为,=中的一个

+operator<

+getDegree() : size_t // 返回该多项式的次数

+setDegree(int) : void // 设置多项式的次数。若设置的次数低于多项式原本的次数,设置被拒绝。

+getCoefficient(): vector // 返回一个数组,储存多项式系数

+derivation() : self // 返回该多项式求导后得到的多项式

+evaluate(double) : double // 返回多项式代入某点值后的值

成员函数:

-shrink_() : void // 简化多项式。即将多项式系数为零且没有必要储存的项舍去。

数据成员:

-coefficient : vector //储存多项式的系数

静态成员:

+isValid(string) : bool // 接受一个代表多项式的字符串,判断其是否合法

+pattern_ : const string // 用于正则表达式的字符串。判断多项式输入是否合法。用于isValid

+regex_ : regex //判断输入是否合法的正则。使用了pattern_

+pattern_iterate_ : string //用于正则表达式的字符串。用于提取括号。

+regex_iterate_ : const regex // 提取括号。使用了pattern_iterate_

+poly_name_pattern_ : const string //用于正则表达式。检测用户提供的多项式的名字是否合法

+regex_poly_name_ : regex // 正则表达式。判断用户提供的多项式的名字是否合法。

2.5 正则匹配匹配一个单词

6e6e7ff10399dc65559dbdfae63bd4ce.png

提取一个括号

8887bd4d0bb057eaf09b0214a26888f6.png

判断输入是否合法

b621462b4aac4f5e24aa15b97b17c3d2.png

三、测试心得

本次项目相比于前几次项目,难度较低。唯一的难点是parsing,即如何将用户的输入正确地转换为多项式。parsing可以用灵活的正则表达式完成。其次的难点是用户交互界面,即如何用尽量简短的代码完成交互界面的需求,写出DRY(don’t repeat yourself)的代码。

相比之下,多项式类的实现反而显得难度较低。可以采用vector储存按索引储存系数,或采用足够大的double[]储存系数。(本项目不考虑指数为负的情况)。

本次项目有些地方可以更加细致。例如根据“面向接口编程”思想,“交互”应该与“数据”和“接口”分离开。Polynomial类应该从一个Interface_Polynomial类继承而来。由前者作为接口,后者作为实现。main函数中所有函数的参数都使用Interface_Polynomial而非Polynomial。

本次项目还可以拓展成允许矩阵运算的计算器。将两者结合在一起。

本次项目让我对C++的使用更加熟练。让我对正则的书写更为了解。加深了我的对面向对象的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值