private decimal EvaluerOperation(NoeudArbreExpression p_noeud) { decimal valeurGauche = Evaluer(p_noeud.Gauche); decimal valeurDroite = Evaluer(p_noeud.Droite); switch (p_noeud.Operateur) { case '+': return(valeurGauche + valeurDroite); case '-': return(valeurGauche - valeurDroite); case '/': if (valeurDroite == 0) { throw new DivideByZeroException(); } return(valeurGauche / valeurDroite); case '*': return(valeurGauche * valeurDroite); default: throw new ArgumentException("Opérateur inconnu"); } }
public NoeudArbreExpression( char p_operation, NoeudArbreExpression p_gauche, NoeudArbreExpression p_droite ) { this.TypeNoeud = TypeNoeudArbreExpression.Operation; this.Operateur = p_operation; this.Gauche = p_gauche; this.Droite = p_droite; }
private void ParcoursInfixe(Action <string> p_action, NoeudArbreExpression p_noeud) { if (p_noeud.Gauche != null) { ParcoursInfixe(p_action, p_noeud.Gauche); } p_action?.Invoke(p_noeud.ToString()); if (p_noeud.Droite != null) { ParcoursInfixe(p_action, p_noeud.Droite); } }
private decimal Evaluer(NoeudArbreExpression p_noeud) { //if (p_noeud.TypeNoeud == TypeNoeudArbreExpression.Operation) { // if (p_noeud.Gauche == null || p_noeud.Droite == null) // { // throw new ArgumentException("Noeud incohérent", "p_noeud"); // } // return EvaluerOperation(p_noeud); //} else if (p_noeud.TypeNoeud == TypeNoeudArbreExpression.Valeur) //{ // if (p_noeud.Gauche != null || p_noeud.Droite != null) // { // throw new ArgumentException("Noeud incohérent", "p_noeud"); // } // return p_noeud.Valeur; //} //else //{ // throw new InvalidProgramException(); //} // <=> switch (p_noeud.TypeNoeud) { case TypeNoeudArbreExpression.Operation: if (p_noeud.Gauche == null || p_noeud.Droite == null) { throw new ArgumentException("Noeud incohérent", "p_noeud"); } return(EvaluerOperation(p_noeud)); case TypeNoeudArbreExpression.Valeur: if (p_noeud.Gauche != null || p_noeud.Droite != null) { throw new ArgumentException("Noeud incohérent", "p_noeud"); } return(p_noeud.Valeur); default: throw new InvalidProgramException(); } }