Tous les projets
Projet C++ L3 INFO

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.

Objet interface
Constante feuille
Variable feuille
UnaryOperator nœud
Sin unaire
Cos unaire
Log unaire
Exp unaire
BinaryOperator nœud
Addition (+) binaire
Soustraction (−) binaire
Multiplication (×) binaire
Division (/) binaire

Ce que fait le système

Support multi-types

Les expressions acceptent des entiers, des doubles et des nombres rationnels — représentés exactement sous la forme [ N DIV D ].

Visualisation ASCII en arbre

Chaque expression se représente graphiquement dans le terminal — branches, sous-arbres et nœuds en un coup d'œil.

Évaluation dynamique

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 riches

Opérateurs binaires +, −, ×, /, ^ et unaires sin, cos, log, exp — tous extensibles via l'héritage.

Approximation de rationnels

La méthode approx_naive convertit tout réel en fraction irréductible à précision configurable — par exemple π ≈ [ 312689 DIV 99532 ].

Expressions construites

Expression simple 3 + 2 − sin(2x)

Opérateurs binaires et fonction unaire — arbre à 3 niveaux.

Avec rationnels e^(sin(a + 1/2) · cos(b + 3/4)) / b

Fractions exactes dans les feuilles — aucune perte de précision.

Expression complexe [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.

rationnel.cpp
// 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

C++17 POO & Héritage Arbres binaires Récursivité Templates Polymorphisme

Évolutions futures

Opérateurs binaires et unaires
Visualisation ASCII de l'arbre
Support des rationnels
Évaluation à une variable
Support multi-variables
Export TikZ / LaTeX
Simplification algébrique
Dérivation symbolique
Interface graphique interactive

Curieux d'explorer le code ?

Le projet complet est disponible en open source sur GitHub.

Voir sur GitHub