Plan (hide)
1. Calcul matriciel
Cet exercice manipule des matrices, mais l'idée est surtout d'utiliser la généricité de type.
1.1 Classe initiale
Vous devez créer une classe itérable permettant de représenter une matrice. Vous définirez dans un premier temps une interface Matrice
générique précisant que la nature des éléments sont convertibles en des types primitifs byte
, double
, float
, int
, long
, et short
. Cette interface comportera les méthodes : get
qui retourne un élément de la matrice en fonction de la ligne et de la colonne fournies et set
qui fixe la valeur d'un élément de la matrice.
Ajouter une méthode toString
et tester votre classe.
1.2 Opération sur les matrices
Compléter en ajoutant la possibilité de faire la somme de deux matrices et le produit de de deux matrices.
1.3 Traitement d'exception
Le produit de deux matrices ou la somme de deux matrices n'est pas toujours possible, dans ce cas vous devrez lever une exception de type ExceptionCalculMat
.
2. Évaluation d'expressions postfixées
Dans cet exercice, vous devez évaluer des expressions arithmétiques écrites de façon postfixée :
- (4 * 5) + 3 s'écrit 4 5 * 3 +, par exemple.
- 4 + (3 * 3) + 2 s'écrit 4 3 3 * + 2 +
Pour cela il faut une pile pour évaluer l'expression.
L'algorithme est le suivant. Soit P
est une pile :
Tant que lire caractère c Si c est un opérande empiler c sur P Sinon Si c est un opérateur y <- sommet(P) dépiler P x <- sommet(P) dépiler P empiler le resultat de "x c y" sur P
Il faut donc définir une pile, vous pourriez utiliser la classe ArrayDeque
mais cela serait trop simple. Je vous propose donc de definir nos propres classes piles en utilisant, soit un tableau de taille variable, soit une liste chaînée. La nature des éléments doit être générique.
2.1 Définir une interface Pile
Cette interface doit fixer les méthodes nécessaires pour gérer une pile. Les éléments doivent pouvoir être de type T
, type générique.
2.2 Définir les classes piles
Définir une classe PileArray
les données sont stockées dans un tableau de taille fixe. Faire le nécessaire, afin de traiter le cas ou le tableau est plein.
Définir une classe PileArrayList
les données sont stockées dans un tableau de taille variable.
Définir une classe PileList
les données sont stockées dans une liste chaînée.
2.3 Évaluation d'une expression
Ecrire trois classes qui évaluent une expression avec chacune des "piles". Quels sont les éléments de code qui changent ?
2.4 foreach
On veut pouvoir utiliser le foreach
pour parcourir nos piles. Que faut-il faire. Modifier en conséquence vos classes/interfaces et tester.