Question 2
void CEXPR::Prefixe (ostream & os, CNodeToken * const Ptr) const
{
if (!Ptr) return;
os << *Ptr << ' ';
Prefixe (os, Ptr->GetGauche());
Prefixe (os, Ptr->GetDroit ());
Question 3
void CEXPR::Postfixe (ostream & os, CNodeToken * const Ptr) const
{
if (!Ptr) return;
Postfixe (os, Ptr->GetGauche());
Postfixe (os, Ptr->GetDroit ());
os << *Ptr << ' ';
Question 4
void CEXPR::Infixe (ostream & os, CNodeToken * const Ptr) const
{
if (!Ptr) return;
if (!Ptr->IsOperator ())
os << *Ptr;
else
{
os << " (";
Infixe (os, Ptr->GetGauche());
os << ' ' << *Ptr << ' ';
Infixe (os, Ptr->GetDroit ());
os << ") ";
}
Question 5
int CEXPR::Evaluer (CNodeToken * const Ptr) const
{
if (!Ptr->IsOperator()) return Ptr->m_Value;
int OperG = Evaluer (Ptr->GetGauche());
int OperD = Evaluer (Ptr->GetDroit ());
switch (Ptr->m_Symbole)
{
case '+' : return OperG + OperD;
case '-' : return OperG - OperD;
case '*' : return OperG * OperD;
case '/' : return OperG / OperD;
}
Question 6
CEXPR::CNodeToken * CEXPR::Ajouter (istream & is /* = cin */)
{
CNodeToken * Gauche = 0;
CNodeToken * Droite = 0;
CToken Token;
is >> Token;
if (Token.IsOperator())
{
Gauche = Ajouter (is);
Droite = Ajouter (is);
}
return new CNodeToken (Token, Gauche, Droite);
} // Ajouter()