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 :
-
les expressions binaires ;
- les expressions unaires ;
- et les constantes.
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.