From 30c2372a86a9eae99a4c1c3b396a51d49d2204bc Mon Sep 17 00:00:00 2001 From: "bollet.c" <> Date: Fri, 23 Feb 2024 18:55:47 +0100 Subject: [PATCH] notice ; corrections mineures --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ infixe.py | 2 +- interface.py | 2 ++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e69de29..e90c1de 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,44 @@ +# Calculatrice + +Une calculatrice. + +## Principe de fonctionnement + +Il est possible d'entrer dans la barre de saisie une expression en notation préfixe, infixe ou postfixe. Pour cela, sélectionner la notation voulue dans le menu : `Notation > ... `. +Pour la notation postfixe, il y a deux mode : + +* le mode expression, accessible par `Notation > postfixe (polonaise inversée) > mode expression` ; c'est le même mode qui est utilisé pour les autres notations. +* et le mode interactif, accessible par `Notation > postfixe (polonaise inversée) > mode interactif`. Le principe de fonctionnement est alors similaire aux calculatrices NPI classiques, comme les HP : les termes sont entrés un à un. + +## Fonctionnalités + +Les nombres entrés peuvent être entiers ou flottants, positifs ou négatifs. +(Les nombres complexes ne sont pas implémentés, toutefois, en effectuant le calcul `-1 ^ 0.5 + 1 - 1`, on obtient précisément `1j`, donc il est *techniquement* possible de les employer, mais seules sont utilisables les opérations de base.) + +Les opérations et fonctions suivantes sont disponibles partout: + +`+` (addition), `-` (soustraction), `*`, `/`, `^`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `factorielle` (qui est en fait la fonction gamma, pour pouvoir entrer des flottants), `sqrt`. + +Les constantes `pi` et `e` sont disponibles. + +# En notation préfixe et postixe (mode expression) + +Le signe `+` peut aussi être utilisé pour l'identité. +Le signe `-` peut aussi être utilisé pour l'opposé. + +# En notation postixe (mode interactif) + +L'opposé s'obtient en entrant `opp` dans la barre de saisie. +La fonction factorielle peut aussi être entrée avec le signe `!`. + +`somme` effectue la somme de tous les termes dans la pile. +`produit` effectue le produit de tous les termes dans la pile. +`moy3` effectue la moyenne des 3 termes au sommet de la pile. + +# En notation infixe + +Il n'y a pas plus de notations, mais les multiplications implicites sont comprises. +Ex : `2 sin 3` est compris comme `2 * sin ( 3 )` +Sont également comprises les multiplications très implicites : +`2 2` est compris comme `2 * 2` +En fait, dès qu'il manque une opération, le programme rajoute une multiplication. Pour éviter cela, il suffit d'ajouter l'opération voulue. diff --git a/infixe.py b/infixe.py index cc8f5bf..925e986 100644 --- a/infixe.py +++ b/infixe.py @@ -81,7 +81,7 @@ def infixe2npi(liste_en_infixe): #identité pass else: - raise ValueError("Opérateur mal utilisé","n'a ici qu'un seul opérande, quand il devrait en avoir deux.",index_token) + raise ValueError("Opérateur mal utilisé","n'a ici qu'un seul opérande (ou aucun), quand il devrait en avoir deux.",index_token) else: try: while pile_op.sommet() != "(" and (priorite[pile_op.sommet()] < priorite[token] or (priorite[pile_op.sommet()] == priorite[token] and associativite[token] == "gauche")): diff --git a/interface.py b/interface.py index d70d437..43dcbac 100644 --- a/interface.py +++ b/interface.py @@ -149,6 +149,8 @@ class Interface(tk.Frame): try: self.entrer_terme_dans_stack(self.saisie_expression.get().replace(" ","")) except ValueError: messagebox.showerror("Saisie invalide", "Le résultat de l'opération n'est pas un nombre réel.") + except TypeError: + messagebox.showerror("Saisie invalide", "L'opérande n'est pas un nombre réel.") else: self.evaluer_expr() except OverflowError: