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.