一元稀疏多项式计算器Word下载.docx
- 文档编号:1436295
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:18
- 大小:196.07KB
一元稀疏多项式计算器Word下载.docx
《一元稀疏多项式计算器Word下载.docx》由会员分享,可在线阅读,更多相关《一元稀疏多项式计算器Word下载.docx(18页珍藏版)》请在冰点文库上搜索。
//A多项式和B多项式相减,输出到LA-B=L
voidCut(LJQList&
//A多项式和B多项式相乘,输出到LA*B=L
voidMultiply(LJQList&
//A多项式的求导函数,并输出到L(A)'
=L
voidDerivation(LJQListA,LJQList&
//删除以e为次幂的节点
voidDeleteOne(LJQList&
L,inte);
//清空该单链表
boolclear(LJQList&
#endif//LJQLIST
这里是LJQList.cpp的代码:
#include"
stdafx.h"
#include"
LJQList.h"
//链表的初始化
L){
L=(LJQList)malloc(sizeof(structLJQLink));
L->
next=NULL;
exp=0;
data=0;
}
//插入一个新的节点赋值幂数e,系数d
voidinsert(LJQListL,inte,floatd){
LJQListn;
n=(LJQList)malloc(sizeof(structLJQLink));
n->
exp=e;
data=d;
next=NULL;
if(n->
data==0)free(n);
//系数为0的话释放结点
else{
LJQListq1,q2;
q1=L;
q2=L->
next;
while(q2&
&
n->
exp<
q2->
exp){//查找插入位置
q1=q2;
q2=q2->
}
if(q2&
exp==q2->
exp){//将指数相同相合并
q2->
data+=n->
data;
free(n);
if(!
data){//系数为0的话释放结点
L->
exp--;
q1->
next=q2->
free(q2);
}else{//指数为新时将结点插入并使项数加1
exp++;
next=q2;
q1->
next=n;
}
LJQListsearch(LJQListL,inte){
LJQListl=L->
for(;
l;
l=l->
next)
if(l->
exp==e){
returnl;
}
returnNULL;
//打印多项式L,以幂数下降为序显示
CStringchangeCString(LJQListL){
LJQListl;
CStrings,cs;
s="
"
;
if(L->
exp){
l=L->
data==1)cs.Format(_T("
X^%d"
),l->
exp),s+=cs;
elseif(l->
data==-1)cs.Format(_T("
-X^%d"
elsecs.Format(_T("
%0.1fX^%d"
data,l->
l=l->
for(;
next){
if(l->
+X^%d"
else{if(l->
data>
=0)
cs.Format(_T("
+%0.1fX^%d"
elseif(l->
data!
=-1)cs.Format(_T("
elsecs.Format(_T("
}
}
returns;
L){
LJQListla,lb;
floatd;
inte;
la=A->
lb=B->
for(la=A->
la;
la=la->
e=la->
exp;
d=la->
insert(L,e,d);
for(lb=B->
lb;
lb=lb->
e=lb->
d=lb->
data;
exp;
d=-lb->
}
while(la){
exp+lb->
data*lb->
la=la->
LJQListl=A->
floatd;
d=l->
data*l->
e=l->
exp-1;
L,inte){
LJQListl,q;
q=L;
if(l=search(L,e))
next){
for(;
q->
q=q->
if(q->
next->
exp==l->
exp){
if(!
l->
next)q->
else
q->
next=l->
free(l);
}
}else{
q;
}
//清空该单链表用一个递归函数清空
if(L->
LJQListq;
q=L->
if(q)DeleteOne(L,q->
exp);
clear(L);
elsereturntrue;
returnfalse;
这里是MFC自动生成的LJQDlg界面类的头文件,里面申明了各种参数,函数
//CLJQDlgdialog
classCLJQDlg:
publicCDialog
{
//Construction
public:
CLJQDlg(CWnd*pParent=NULL);
//standardconstructor
//DialogData
//{{AFX_DATA(CLJQDlg)
enum{IDD=IDD_LJQ_DIALOG};
intm_edit_exp;
CStringm_A;
CStringm_B;
floatm_edit_data;
CStringm_Show;
intm_Radio_Kind;
CStringm_Message;
intm_RadioAB;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CLJQDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
LJQListL;
LJQListB;
LJQListA;
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CLJQDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnButtonJisuan();
afx_msgvoidOnButtonTianjia();
afx_msgvoidOnButtonClear();
afx_msgvoidOnButtonDel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
这里是LJQDlg.cpp文件的按钮上的各个事件响应函数:
//对应的是“
”按钮
voidCLJQDlg:
:
OnButtonJisuan(){
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(B->
exp==0||A->
exp==0)MessageBox("
A或B各至少需要添加一次才可以参加计算!
);
else{
switch(m_Radio_Kind){
case0:
Add(A,B,L);
m_Show="
A+B="
m_Show+=changeCString(L);
break;
case1:
Cut(A,B,L);
A-B="
case2:
Multiply(A,B,L);
A×
B="
case3:
Derivation(A,L);
对A求导="
UpdateData(false);
OnButtonTianjia()
CStrings="
m_Message="
if(m_edit_exp*10%10==0)
switch(m_RadioAB){
insert(A,m_edit_exp,m_edit_data);
m_A=changeCString(A);
m_Message="
当前A多项式共有"
s.Format(_T("
%d项!
),A->
m_Message+=s;
break;
insert(B,m_edit_exp,m_edit_data);
m_B=changeCString(B);
当前B多项式共有"
),B->
OnButtonClear()
m_A="
clear(A);
清空A成功!
m_B="
clear(B);
清空B成功!
OnButtonDel()
CStrings="
A->
exp){
MessageBox("
当前A多项式为空,删除失败!
break;
if(l=search(A,m_edit_exp)){
删除A中"
%d"
m_Message+=s;
m_Message+="
次幂项成功!
m_Message+="
该项系数为"
%0.1f"
data);
m_Message+=s;
DeleteOne(A,m_edit_exp);
}elsem_Message="
删除失败!
A中不存在该次幂项。
B->
当前B多项式为空,删除失败!
if(l=search(B,m_edit_exp)){
删除B中"
DeleteOne(B,m_edit_exp);
B中不存在该次幂项。
m_A=changeCString(A);
m_B=changeCString(B);
3.这是整个软件运行的界面
4.整个程序的介绍说明:
1.对A或B多项式添加各种次幂的项(确保各至少有一项才能计算,注意,假如添加的项的次幂多项式里面已经存在,则是视为系数上的相加);
2.对A或B多项式删除指定次幂的项,不存在会返回信息;
3.清空A或B多项式;
4.进行当前A和B多项式的相加,相减,相乘,还有对A求导,计算过程如果出现系数为0的项则自动删除
5.执行1~4操作的过程,会有操作信息显示在右上角的显示框里,A和B当前的项数都会有显示;
6.对于A和B的显示,按次幂从大到小排序,用了CString风格字符串,里面对于多项式的显示完全是通过一系列算法加以转换输出显示,并对个别特殊系数比如1,-1,都有特殊的显示处理;
7.最下的是整个计算结果的输出框,一有计算就会显示出计算结果;
8.对于系数我里面定义的是float类型,我只处理显示小数后一位;
9.上面的勾选按钮各表示当前对A或B的操作,必须指定好,下面的勾选按钮各表示当前对计算功能的操作;
5.课程设计遇到的问题:
开始遇到了链表删除问题,总是遇空报错,后来修改了很多,还有字符转换显示问题,用循环把每个节点转换成CString风格字符串加以显示,还是靠同学,了解到了Format()函数的运用。
6.心得:
通过本次课程设计,学到了很多东西,学到了如何利用数据结构这门课所学的的知识,来解决问题,构造合理,切当的数据结构来使得问题简单化。
2012年7月1日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 稀疏 多项式 计算器