|
@ -1,5 +1,7 @@ |
|
|
from Pile import Pile_lst |
|
|
from Pile import Pile_lst |
|
|
|
|
|
from math import * |
|
|
from tkinter import * |
|
|
from tkinter import * |
|
|
|
|
|
from tkinter.messagebox import * |
|
|
|
|
|
|
|
|
class Expression: |
|
|
class Expression: |
|
|
def __init__(self, valeur, gauche, droite): |
|
|
def __init__(self, valeur, gauche, droite): |
|
@ -17,25 +19,46 @@ class Expression: |
|
|
return self.gauche.evalue() - self.droite.evalue() |
|
|
return self.gauche.evalue() - self.droite.evalue() |
|
|
elif self.valeur == '/': |
|
|
elif self.valeur == '/': |
|
|
return self.gauche.evalue() / self.droite.evalue() |
|
|
return self.gauche.evalue() / self.droite.evalue() |
|
|
|
|
|
elif self.valeur == '^': |
|
|
|
|
|
return self.gauche.evalue() ** self.droite.evalue() |
|
|
|
|
|
elif self.valeur == 'sqrt': |
|
|
|
|
|
return sqrt(self.gauche.evalue()) |
|
|
|
|
|
elif self.valeur == 'cos': |
|
|
|
|
|
return cos(self.gauche.evalue()) |
|
|
|
|
|
elif self.valeur == 'sin': |
|
|
|
|
|
return sin(self.gauche.evalue()) |
|
|
|
|
|
elif self.valeur == 'tan': |
|
|
|
|
|
return tan(self.gauche.evalue()) |
|
|
else: |
|
|
else: |
|
|
return self.valeur |
|
|
return self.valeur |
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
def __str__(self): |
|
|
if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and self.valeur != '/': |
|
|
if self.valeur != '+' and self.valeur != '*' and self.valeur != '-' and self.valeur != '/' and self.valeur != '^' and self.valeur != 'sqrt' and self.valeur != 'cos' and self.valeur != 'sin' and self.valeur != 'tan': |
|
|
return self.valeur |
|
|
return self.valeur |
|
|
elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/': |
|
|
elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/' or self.valeur == '^': |
|
|
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" |
|
|
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" |
|
|
|
|
|
elif self.valeur == 'sqrt': |
|
|
|
|
|
return "(sqrt(" + str(self.gauche.__str__()) + ')' + ')' |
|
|
|
|
|
elif self.valeur == 'cos': |
|
|
|
|
|
return "(cos(" + str(self.gauche.__str__()) + ')' + ')' |
|
|
|
|
|
elif self.valeur =='sin': |
|
|
|
|
|
return "(sin(" + str(self.gauche.__str__()) + ')' + ')' |
|
|
|
|
|
elif self.valeur == 'tan': |
|
|
|
|
|
return "(tan(" + str(self.gauche.__str__()) + ')' + ')' |
|
|
|
|
|
|
|
|
def npi2tree(exp): |
|
|
def npi2tree(exp): |
|
|
"""Prends en paramètre une ... correspondant à l'expression en notation polonaise inversée et renvoie l'arbre correspondant""" |
|
|
"""Prends en paramètre une ... correspondant à l'expression en notation polonaise inversée et renvoie l'arbre correspondant""" |
|
|
pile_npi = Pile_lst() |
|
|
pile_npi = Pile_lst() |
|
|
lst_npi = exp.split() |
|
|
lst_npi = exp.split() |
|
|
for element in lst_npi: |
|
|
for element in lst_npi: |
|
|
if element == '+' or element == '*' or element == '-' or element == '/': |
|
|
if element == '+' or element == '*' or element == '-' or element == '/' or element == '^': |
|
|
exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) |
|
|
exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) |
|
|
pile_npi.empiler(exp_npi) |
|
|
pile_npi.empiler(exp_npi) |
|
|
|
|
|
elif element == 'sqrt' and element == 'cos' and element == 'sin' and element == 'tan': |
|
|
|
|
|
exp_npi = Expression(element, pile_npi.depiler(), None) |
|
|
|
|
|
pile_npi.empiler(exp_npi) |
|
|
else: |
|
|
else: |
|
|
exp_feuille = Expression(int(element), None, None) |
|
|
exp_feuille = Expression(float(element), None, None) |
|
|
pile_npi.empiler(exp_feuille) |
|
|
pile_npi.empiler(exp_feuille) |
|
|
return pile_npi.sommet() |
|
|
return pile_npi.sommet() |
|
|
|
|
|
|
|
@ -48,11 +71,6 @@ def npi2tree(exp): |
|
|
|
|
|
|
|
|
fenetre = Tk() |
|
|
fenetre = Tk() |
|
|
|
|
|
|
|
|
#def enregistrer(): |
|
|
|
|
|
# expr = zonetexte.get() |
|
|
|
|
|
# affichage = npi2tree(expr) |
|
|
|
|
|
# texte2.configure(text=affichage) |
|
|
|
|
|
|
|
|
|
|
|
def resultat(): |
|
|
def resultat(): |
|
|
expr = zonetexte.get() |
|
|
expr = zonetexte.get() |
|
|
res = npi2tree(expr).evalue() |
|
|
res = npi2tree(expr).evalue() |
|
@ -61,6 +79,30 @@ def resultat(): |
|
|
affichage = npi2tree(expr) |
|
|
affichage = npi2tree(expr) |
|
|
texte4.configure(text=affichage) |
|
|
texte4.configure(text=affichage) |
|
|
|
|
|
|
|
|
|
|
|
def legende(): |
|
|
|
|
|
fenetre = Tk() |
|
|
|
|
|
fenetre.title('Légende') |
|
|
|
|
|
texteLeg1 = Label(fenetre, text='Pour faire une addition, taper : + ') |
|
|
|
|
|
texteLeg1.pack() |
|
|
|
|
|
texteLeg2 = Label(fenetre, text='Pour faire une soustraction, taper : - ') |
|
|
|
|
|
texteLeg2.pack() |
|
|
|
|
|
texteLeg3 = Label(fenetre, text='Pour faire une multiplication, taper : * ') |
|
|
|
|
|
texteLeg3.pack() |
|
|
|
|
|
texteLeg4 = Label(fenetre, text='Pour faire une division, taper : / ') |
|
|
|
|
|
texteLeg4.pack() |
|
|
|
|
|
texteLeg5 = Label(fenetre, text='Pour faire une faire une puissance de ..., taper : ^ ') |
|
|
|
|
|
texteLeg5.pack() |
|
|
|
|
|
texteLeg6 = Label(fenetre, text='Pour faire une racine carré, taper: sqrt') |
|
|
|
|
|
texteLeg6.pack() |
|
|
|
|
|
texteLeg7 = Label(fenetre, text='Pour faire le cosinus de..., taper: cos') |
|
|
|
|
|
texteLeg7.pack() |
|
|
|
|
|
texteLeg8 = Label(fenetre, text='Pour faire le sinus de..., taper: cos') |
|
|
|
|
|
texteLeg8.pack() |
|
|
|
|
|
texteLeg9 = Label(fenetre, text='Pour faire la tangente de..., taper: tan') |
|
|
|
|
|
texteLeg9.pack() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
zonetexte = Entry(fenetre, width=30) |
|
|
zonetexte = Entry(fenetre, width=30) |
|
|
zonetexte.pack() |
|
|
zonetexte.pack() |
|
@ -78,7 +120,10 @@ texte4.pack() |
|
|
enregistrer=Button(fenetre, text="Résultat", command=resultat) |
|
|
enregistrer=Button(fenetre, text="Résultat", command=resultat) |
|
|
enregistrer.pack() |
|
|
enregistrer.pack() |
|
|
|
|
|
|
|
|
|
|
|
menubar = Menu(fenetre) |
|
|
|
|
|
menu1 = Menu(menubar, tearoff=0) |
|
|
|
|
|
menu1.add_command(label="Légende", command=legende) |
|
|
|
|
|
menubar.add_cascade(label="Option", menu=menu1) |
|
|
|
|
|
fenetre.config(menu=menubar) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|