UFR de Mathématiques et d'Informatique
IUP 1, DEUG 2, 2002/2003
Algorithmique et programmation orientées objet
Travaux dirigés
Séance 4, mars





Les expressions arithmétiques et leur évaluation






Il s'agit dans cet exercice de représenter les expressions arithmétiques (d'entiers relatifs), et de proposer un moyen de les évaluer.





Pour cela, on propose la modélisation suivante. Parmi les expressions arithmétiques, on distingue :


On créera donc les classes ExpBinaire, ExpUnaire, et Constante. Elle héritent toutes de la classe abstraite ExpArith, qui ne contient qu'une méthode (abstraite) : int evaluer(). Les opération d'addition, de soustraction, et de multiplication seront codées par les caractères +, -, et *, respectivement.





Ecrivez les classes ExpArith, ExpArithBinaire, ExpArithUnaire, et Constante.
Votre code devra pouvoir fonctionner avec le test suivant :



public class TestExpArith {

  // Test de la classe ExpArith :
  public static void main (String args []) {
    ExpArith e1  = new Constante(4) ;
    ExpArith e2  = new Constante(5) ;
    ExpArith e3  = new Constante(5) ;
    ExpArith e4  = new Constante(8) ;
    ExpArith e5  = new Constante(3) ;

    ExpArith e6  = new ExpArithBinaire(e1, '+', e2) ;
    ExpArith e7  = new ExpArithUnaire('-', e3) ;
    ExpArith e8  = new ExpArithBinaire(e7, '+', e4) ;
    ExpArith e9  = new ExpArithBinaire(e6, '*', e8) ;
    ExpArith e10 = new ExpArithBinaire(e9, '+', e5) ;

    System.out.println(e1) ;
        // devrait afficher : 4
    System.out.println(e6) ;
        // devrait afficher : (4) + (5)
    System.out.println(e8) ;
        // devrait afficher : (-(5)) + (8)
    System.out.println(e9) ;
        // devrait afficher : (4) + (5)) * (-(5) + (8))
    System.out.println(e10) ;
        // devrait afficher : ((4) + (5)) * (-(5) + (8))) + (3)

    System.out.println(e10.evaluer()) ;
        // devrait afficher : 30


    ExpArith e20 =
      new  ExpArithBinaire (
          new ExpArithBinaire (
              new ExpArithBinaire (
                  new Constante(4)
                ,  '+'
                ,  new Constante(5)
              )
            ,  '*'
            , new ExpArithBinaire (
                  new ExpArithUnaire(
                      '-'
                    ,  new Constante(5)
                  )
                ,  '+'
                , new Constante(8)
              )
          )
        , '+'
        , new Constante(3)
      ) ;

    System.out.println(e20) ;
        // devrait afficher : ((4) + (5)) * (-(5) + (8))) + (3)
    System.out.println(e20.evaluer()) ;
        // devrait afficher : 30
  }
}




Remarquez, en particulier, que cela implique de redéfinir de façon appropriée la méthode String toString() dans les classes concernées.


This document was translated from LATEX by HEVEA.