山东大学软件学院数据结构课程设计第一题python实现

基本要求

一元稀疏多项式简单计算器的基本功能是:

(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()


你可能感兴趣的:(算法)