基本要求
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b;
(5)计算多项式在x处的值;
(6)计算器的仿真界面(选做)
基本要求
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b;
(5)计算多项式在x处的值;
(6)计算器的仿真界面(选做)
实现思想及算法描述:
用数组来表示相应的多项式
其中,数组的位置序号表示指数,该位置的元素表示系数,从而通过数组运算来实现多项式加减运算
在输入框输入多项式后,应使用正则表达式来进行匹配,从而识别出系数与指数,从而构建数组
python代码及注释:
import tkinter as TK
from tkinter.constants import *
import re
root=TK.Tk()
root.title("计算器")
show=TK.Entry(root)
show.pack()
#图形界面初始化
first1=re.compile(r".\d*x")
first2=re.compile(r".\d*")
last1=re.compile(r"\^\d*")
last2=re.compile(r"\d+")
#正则表达式初始化
''' 测试数据: -3x^1+5x^2 '''
theone=[]
thetwo=[]
operator=""
n=0
#静态变量初始化
#用于格式化保存输入框中的数据
def save():
str=show.get()
first=re.findall(first1,str)
last = re.findall(last1, str)
for i in range(0,len(first)):
first[i]=int(re.findall(first2,first[i])[0])
last[i]=int(re.findall(last2,last[i])[0])
maxint=0
x=0
for i in range(0,len(last)):
if first[i]!=0:
x+=1
if last[i]>maxint:
maxint=last[i]
one=[0]*(maxint+1)
global n
if x>n:
n=x
for i in range(0,len(first)):
position=last[i]
one[position]=first[i]
global theone
global thetwo
if len(theone)==0:
theone=one
else:
thetwo=one
print(one)
#加法按钮绑定的方法
def sum():
save()
show.delete(0,END)
global operator
operator="+"
#减法按钮绑定的方法
def dec():
save()
show.delete(0,END)
global operator
operator="-"
#等号按钮绑定的方法
#针对不同的运算,有不同的分支进行处理
def result():
global n
global thetwo
global theone
if operator=='x':
x=show.get()
x=int(x)
resul=0
for i in range(0,len(theone)):
if theone[i]==0:
continue
else:
resul+=theone[i]*(x**i)
show.delete(0,END)
show.insert(0,str(resul))
return 0
if operator=="":
save()
'''for i in range(0,len(theone)):
if theone[i]==0:
continue
if theone[i]<0:
string+=str(theone[i])+"x^"+str(i)
if theone[i]>0:
string+="+"+str(theone[i])+"x^"+str(i)
show.delete(0,END)
show.insert(0,string=string)
复原整个多项式的方法,以上'''
if operator=="+":
save()
if len(theone)>len(thetwo):
long=len(theone)
short=len(thetwo)
longer=theone
shorter=thetwo
else:
long=len(thetwo)
short=len(theone)
longer=thetwo
shorter=theone
for i in range(0,short):
longer[i]+=shorter[i]
theone=longer
thetwo=[]
if operator=="-":
save()
if len(theone)>=len(thetwo):
for i in range(0,len(thetwo)):
theone[i]=theone[i]-thetwo[i]
else:
for i in range(0,len(theone)):
thetwo[i]=theone[i]-thetwo[i]
for i in range(len(theone),len(thetwo)):
thetwo[i]=0-thetwo[i]
theone=thetwo
thetwo=[]
string=""
x = 0
for i in range(0, len(theone)):
if theone[i]== 0:
continue
else:
x = x + 1
string += "" + str(theone[i]) + "" + str(i)
string=str(x)+" "+string
show.delete(0, END)
show.insert(0, string)
#赋值运算绑定的方法
def x_value():
save()
global operator
operator="x"
show.delete(0,END)
#定义一个frame,在其中添加四个按钮,进行左对齐排列
frame1=TK.Frame(root)
button1=TK.Button(frame1,text="+",command=sum)
button1.pack(side=LEFT)
button2=TK.Button(frame1,text="-",command=dec)
button2.pack(side=LEFT)
button3=TK.Button(frame1,text="=",command=result)
button3.pack(side=LEFT)
button4=TK.Button(frame1,text="x=",command=x_value)
button4.pack(side=LEFT)
frame1.pack(side=TOP)
#使界面进行显示,直到用户点击关闭键退出
root.mainloop()