Expression Mathématiques Arbres binaires & POO en C++
Un système élégant de représentation et d'évaluation d'expressions mathématiques complexes, structurées sous forme d'arbres binaires grâce à l'héritage et au polymorphisme C++.
Hiérarchie de classes
Le projet repose sur une interface abstraite Objet dont héritent toutes les entités — constantes, variables et opérateurs. Cette conception permet d'évaluer n'importe quelle expression par simple appel récursif, sans connaître le type concret du nœud.
Ce que fait le système
Les expressions acceptent des entiers, des doubles et des nombres rationnels — représentés exactement sous la forme [ N DIV D ].
Chaque expression se représente graphiquement dans le terminal — branches, sous-arbres et nœuds en un coup d'œil.
Les expressions à une variable sont évaluables pour n'importe quelle valeur d'entrée grâce à une traversée récursive de l'arbre.
Opérateurs binaires +, −, ×, /, ^ et unaires sin, cos, log, exp — tous extensibles via l'héritage.
La méthode approx_naive convertit tout réel en fraction irréductible à précision configurable — par exemple π ≈ [ 312689 DIV 99532 ].
Expressions construites
3 + 2 − sin(2x)
Opérateurs binaires et fonction unaire — arbre à 3 niveaux.
e^(sin(a + 1/2) · cos(b + 3/4)) / b
Fractions exactes dans les feuilles — aucune perte de précision.
[log(sin(x+1)·cos(y−2) + e^(z+3)/4) − sin(xy+z)] · e^(z+3) / e^(log(…)+6)
Arbre profond avec 7 niveaux, 3 variables et 4 fonctions imbriquées.
Arithmétique exacte
La classe Rationnel stocke numérateur et dénominateur en entiers irréductibles. Toutes les opérations (+, −, ×, /) restent exactes, et une méthode d'approximation naïve permet de convertir n'importe quel flottant en fraction.
// Création et affichage Rationnel r(4, 7); std::cout << r << std::endl; // → [ 4 DIV 7 ] // Approximation de π Rationnel r_pi; Rationnel::approx_naive(M_PI, 100000, r_pi); std::cout << "π ≈ " << r_pi << std::endl; // → π ≈ [ 312689 DIV 99532 ]
Technologies
Évolutions futures
Curieux d'explorer le code ?
Le projet complet est disponible en open source sur GitHub.
Voir sur GitHub