TP4 - Tableaux et collections

De $1

Version de 17:35, 18 Jun 2025

cette version.

Revenir à liste des archives.

Voir la version actuelle

Cours

Les paramètres de la ligne de commande

Affichage

  • Faire une application Java qui affiche les paramètres de la ligne de commande
  • Faire afficher les paramètres de la ligne de commande de façon triée (dans l'ordre lexicographique), non il ne faut PAS écrire une méthode de tri !

Des paramètres entiers ?

On veut faire une application Java qui fait la somme des arguments de la ligne de commande en supposant qu'il n'y ait que des entiers.

Exemple:

java Somme 12 25 40 -12

doit afficher le résultat: 65

Ecrire la classe Somme en Java.

Note: regarder la documentation de la méthode statique parseInt de la classe Integer.

Les vecteurs

On veut faire une classe qui modélise des vecteurs.

Les vecteurs 2D

  • Un Vecteur2D v est un objet qui a deux composantes v=< x, y >.
  • On sait lire la valeur de chacune des deux composantes x et y
  • On NE sait PAS modifier les valeurs des composantes d'un vecteur 
  • On sait multiplier un Vecteur v par un scalaire k (un nombre approché) pour obtenir un AUTRE vecteur k * v = < k*x, k*y >
  • On sait calculer le produit scalaire de deux vecteurs v1 et v2 pour obtenir un scalaire :  v1 * v2 = v1.x * v2.x + v1.y * v2.y
  • On sait transposer un vecteur v pour obtenir un AUTRE vecteur  vt = < y, x >
  • On sait ajouter deux vecteurs  v1 et v2 pour obtenir un AUTRE vecteur :  v1 + v2 = < v1.x + v2.x, v1.y + v2.y >
  • On sait afficher de manière textuelle les composantes d'un vecteur (méthode toString).

Proposer une classe Vecteur2D qui réalise toutes les opérations décrites ci-dessus.

Les vecteurs généralisés

Un vecteur généralisé de dimension n est un vecteur qui a n composantes. Les mêmes opérations que que sur le vecteur 2D sont possibles.

Les vecteurs sont construits de deux façons différentes:

  • Soit en donnant la valeur dans chaque composante, la dimension est déterminée en fonction du nombre "variable" de composantes
    • new Vecteur(12, 23, 40) construit un vecteur de dimension 3
    • new Vecteur(12) provoque une erreur (il n'est pas possible de construire un vecteur avec 1 seule composante !)
    • new Vecteur(64, 0, 12, 23) construit un vecteur de dimension 4
  • Soit en donnant en donnant la dimension et une partie (éventuellement nulle) des valeurs des composantes, 
    • Les autres composantes sont alors initialisées à zéro
    • new Vecteur(4); construit un vecteur de dimension 4 avec toutes les composantes à zéro
    • new Vecteur(2, 4, 5, 6); provoque une erreur, il y a plus de valeurs initiales que de composantes !
    • new vecteur(3, 10, 20); construit le vecteur à 3 dimensions suivants : <10, 20, 0>

Proposer une classe Vecteur.

Calculatrice polonaise inversée

On veut utiliser la ligne de commande pour faire une calculatrice en ordre inversée. Comme on ne veut pas utiliser de structure de données compliquée, on décide de fonctionner en notation polonaise inverse.

Par exemple, pour ajouter 5 à 12 on écrira:

java Calculatrice 5 12 +

 Que fait l'opération suivante ?

java Calculatrice 5 12 4 + 3 - *

Est-ce différent de :

java Calculatrice 12 4 + 5 3 - *

Ecrire la classe Calculatrice correspondante !

Il y a plusieurs façons de réaliser cette calculatrice. La structure de contrôle la mieux adaptée est la pile. Une pile P a deux opérations, une opération push(int) qui empile un entier [en sommet de pile] et une opération pop():int qui prend l'élément en sommet de pile, le dépile et le rend à l'utilisateur. Cette dernière opération provoque une erreur si la pile est vide.

L'algorithme suivant est proposé :

Pour chaque argument arg

  1. Si arg un nombre, on l'empile
  2. Si arg un opérateur unaire
    • On dépile une valeur,
    • On applique l'opérateur,
    • On empile le résultat
  3. Si arg un opérateur binaire
    • On dépile deux valeurs ,
    • On applique l'opérateur,
    • On empile le résultat

On peut réaliser facilement une pile avec une ArrayList. L'interface Deque est le type abstrait le plus naturel.