Development of a scientific calculator with Reverse Polish Notation in C++
LO21
Development of a scientific calculator with Reverse Polish Notation in C++
UTComputer : Calculatrice RPN
La notation polonaise inversée permet une écriture arithmétique sans ambiguité et sans parenthèses :
1 + 1 donne 1 1 + en RPN.
2 * 2 + 1 donne 2 2 * 1 +
(2 + 3) * 4 donne 2 3 + 4 *
Cela nécessite l'implémentation d'une pile pour le calcul :
Si l'opérande est une littérale, elle est empiler sur la pile
Si l'opérande est un opérateur d'arité n, n expressions sont dépilés et le résultat du calcul est empilé.
Un opérateur a une et une seule arité.
Priorité des opérateurs
Associativité : De gauche à droite
Il manque des opérateurs.
Opérateur
Priorité
Arité
()
9
Pas vraiment un opérateur
$
8
unaire
NEG
7
unaire
NOT
7
unaire
*
6
binaire
/
6
binaire
MOD
6
binaire
DIV
6
binaire
+
5
binaire
-
5
binaire
<
4
binaire
<=
4
binaire
>
4
binaire
>=
4
binaire
=
3
binaire
!=
3
binaire
AND
2
binaire
OR
1
binaire
Autres (opérateurs de pile, etc.)
0
Pas d'arité
Options de l'application
Affichage du clavier
X derniers éléments de la pile à afficher
Bip sonore (message utilisateurs)
Opérations
+
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière
LittéraleRationnelle
LittéraleRationnelle
LittéraleRationnelle ou LittéraleEntière (si dénominateur = 1)
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle
LittéraleRéelle
LittéraleRéelle
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle (LittéraleNumérique)
LittéraleComplexe
LittéraleComplexe ou LittéraleNumérique (si partie imaginaire = 0)
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
-
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière
LittéraleRationnelle
LittéraleRationnelle
LittéraleRationnelle ou LittéraleEntière (si dénominateur = 1)
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle
LittéraleRéelle
LittéraleRéelle
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle (LittéraleNumérique)
LittéraleComplexe
LittéraleComplexe ou LittéraleNumérique (si partie imaginaire = 0)
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
*
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière
LittéraleRationnelle
LittéraleRationnelle
LittéraleRationnelle ou LittéraleEntière (si dénominateur = 1)
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle
LittéraleRéelle
LittéraleRéelle
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle (LittéraleNumérique)
LittéraleComplexe
LittéraleComplexe ou LittéraleNumérique (si partie imaginaire = 0)
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
/
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière ou LittéraleRationnelle
LittéraleRationnelle
LittéraleRationnelle
LittéraleRationnelle ou LittéraleEntière (si dénominateur = 1)
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle
LittéraleRéelle
LittéraleRéelle
LittéraleEntière ou LittéraleRationnelle ou LittéraleRéelle (LittéraleNumérique)
LittéraleComplexe
LittéraleComplexe ou LittéraleNumérique (si partie imaginaire = 0)
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
DIV
Provoque une erreur sur LittéraleRationnelle, LittéraleRéelle ou LittéraleComplexe ?
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
MOD
Provoque une erreur sur LittéraleRationnelle, LittéraleRéelle ou LittéraleComplexe ?
Opérande 1
Opérande 2
Sortie
LittéraleEntière
LittéraleEntière
LittéraleEntière
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
POW
Opérande 1
Opérande 2
Sortie
LittéraleNumérique ou LittéraleComplexe
LittéraleNumérique
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
NEG
Opérande
Sortie
LittéraleNumérique ou LittéraleComplexe
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
LittéraleExpression
SIN, ARCSIN, COS, ARCCOS, TAN, ARCTAN (radian)
On va oublier la trigonométrie complexe, ça part en sinus hyperboliques etc.
Opérande
Sortie
LittéraleNumérique
LittéraleNumérique
LittéraleExpression
LittéraleExpression
SQRT
On va commencer sans implémenter le calcul d'une racine carrée d'un nombre complexe.
Une racine négative renvoie un nombre complexe.
Opérande
Sortie
LittéraleNumérique
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
LittéraleExpression
EXP
Opérande
Sortie
LittéraleNumérique ou LittéraleComplexe
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
LittéraleExpression
LN
Il s'agit par définition du logarithme naturelle, donc réel. On ne se préoccupe pas de l'implémentation complexe.
Opérande
Sortie
LittéraleNumérique
LittéraleNumérique
LittéraleExpression
LittéraleExpression
NUM
Provoque une erreur sur LittéraleRéelle ou LittéraleComplexe.
Opérande
Sortie
LittéraleEntière ou LittéraleRationnelle
LittéraleEntière
LittéraleExpression
LittéraleExpression
DEN
Provoque une erreur sur LittéraleRéelle ou LittéraleComplexe.
Opérande
Sortie
LittéraleEntière ou LittéraleRationnelle
LittéraleEntière
LittéraleExpression
LittéraleExpression
$
Opérande 1
Opérande 2
Sortie
LittéraleNumérique
LittéraleNumérique
LittéraleComplexe
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleExpression
LittéraleNumérique ou LittéraleComplexe
LittéraleExpression
RE, IM, ARG, NORM
Opérande
Sortie
LittéraleComplexe ou LittéraleNumérique
LittéraleNumérique
LittéraleExpression
LittéraleExpression
Opérateurs logiques
Opérande
Sortie
LittéraleComplexe ou LittéraleNumérique
LittéraleEntière (0 ou 1)
LittéraleExpression
LittéraleExpression
Design Pattern
On utilise le design pattern Adapter (en objet serait mieux) pour réutiliser les classes QStack et QVector pour la pile et la/les factorie.
Design pattern Factory Method.
Peut-être Composite aussi.