Skip to content

ljuglaret/CalculatriceJava

Repository files navigation

Calculatrice

Présentation

Il s'agit ici d'une version simplifée :

  • Calculs sur les réels

  • Opérations arithmétiques élémentaires :

    • Division

    • Multiplication

    • Addition

    • Soustraction

  • Possibilité d'effacer le dernier caractère saisi

  • Reprendre le calcul à partir de la dernière valeur calculée.

Méthode d'évaluation d'une expression artithmétique

L'expression expression est stockée sous forme de chaîne de caractères.
Deux piles sont initialisées :

  • ops pour stocker les opérateurs : + - * /
  • pileExpression pour stocker les valeurs sucessives de expression.

La méthode effectuerCalcul(ops , pile expression) utilisée est définie ainsi:

​public static void effectuerCalcul(Stack<Character> ops, Stack<Double> pileExpression) {
       ​char operateur = ops.pop();
       ​double valeur2 = pileExpression.pop();
       ​double valeur1 = pileExpression.pop();
       ​double resultat = 0;
       
       ​switch (operateur) {
       ​case plus:
           ​resultat = valeur1 + valeur2;
           ​break;
       ​case moins:
           ​resultat = valeur1 - valeur2;
           ​break;
       ​case mul:
           ​resultat = valeur1 * valeur2;
           ​break;
       ​case div:
           ​if (valeur2 == 0)
               ​throw new UnsupportedOperationException("division par zero impossible");
           ​resultat = (double) (valeur1 / valeur2);
           ​break;
       ​}
       ​pileExpression.push(resultat);
   ​}

Pour rappel, la méthode pop d'une pile retourne son sommet et le retire de la pile.

Chaque caractère de l'expression arithmétique est lu.

  • Si le caractère est un opérateur (opi), alors :

    • Soit l'opérateur au sommet (opSommet) de la pile ops est prioritaire par rapport à opi et dans ce cas la méthode effectuerCalcul(ops , pile expression) est appelée

    • Soit il ne l'est pas et opi est simplement stockée au sommet de ops.

  • Si le caractère est un chiffre alors cette lecture continue tant que le carcactère suivant est lui aussi un nombre ou un . (pour pouvoir stocker des réels)

  • Si le caractère est une parenthèse ouvrante alors il est stocké au sommet de ops.

  • Si le caractère est une parenthèse fermante alors tant que le sommet de ops n'est pas une parenthèse ouvrante la méthode effectuerCalcul(ops , pile expression) est appelée.
    Ensuite ops est dépilé.
    Par exemple pour l'expression : 1+(2+(3+4)) les états successifs de pileExpression sont

    1  
    1 2    
    1 2 3    
    1 2 3 4      
    1 2 7   
    1 9    
    10   
    

    et ceux de ops sont

    +   
    + (    
    + ( +   
    + ( + (        
    + ( + ( +
    

Exemples

Illustrations de ce qui se passe au niveau de la pile des opérateurs et de la pile servant à stocker les résultats successifs de l'évaluation d'une expression.

Ces résultats sont aussi observables dans le fichier généré par les logs : logs/logPileCalculs.log

Utilisation :

  • Cloner le projet
  • Dans un terminal : java -jar calculatrice-0.1.0.jar

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages