Browse Source

Fonction cos, sin et tan defectueuse mais terminé

master
GUILLAUME Baptiste 10 months ago
parent
commit
98c30c61a4
  1. 77
      calculatrice.py

77
calculatrice.py

@ -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,24 +79,51 @@ 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()
texte1 = Label(fenetre,text="Résultat:") texte1 = Label(fenetre, text="Résultat:")
texte1.pack() texte1.pack()
texte2 = Label(fenetre,text="???") texte2 = Label(fenetre, text="???")
texte2.pack() texte2.pack()
texte3 = Label(fenetre,text="Expression:") texte3 = Label(fenetre, text="Expression:")
texte3.pack() texte3.pack()
texte4 = Label(fenetre,text="???") texte4 = Label(fenetre, text="???")
texte4.pack() 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)

Loading…
Cancel
Save