Support de cours
Les vecteurs 2D
On veut faire une classe qui modélise des vecteurs.
- 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 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, il faut regarder la classe java.util.Arrays !
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 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, new int[]{});
construit un vecteur de dimension 4 avec toutes les composantes à zéro new Vecteur(2, new int[]{4, 5, 6});
provoque une erreur, il y a plus de valeurs initiales que de composantes ! new vecteur(3, new int[]{10, 20});
construit le vecteur à 3 dimensions suivants : <10, 20, 0>
Proposer une classe Vecteur
.
Recherche
Regardez la documentation de la méthode Arrays.binarySearch discutée en cours. Cette méthode renvoie l'indice d'un élément e
dans un tableau t
. Si l'élément e
n'est pas présent dans t
alors la méthode renvoie la valeur -1. Le seul problème est que le tableau est supposé être trié auparavant.
Comment faire si le tableau n'est pas trié ? Oui on pourrait le trier (mais cela coûte cher).
- Implanter plutôt une méthode
recherche
qui ne suppose pas que le tableau d'entier est trié ? - Dans le pire des cas quel est le coût de cette opération ?
- Est-ce important que le tableau contienne des entiers ?
- Proposer une méthode
rechercheDichotomique
qui permet de trouver un entier lorsque le tableau est ordonné. On pourra utiliser la méthode Arrays.sort
pour trier le tableau d'entier (avant d'appeler la méthode). Par contre, il est INTERDIT d'utiliser la méthode Arrays.binarySearch
et il faudra ré-implanter cette méthode. On rappelle pour cela le principe de la recherche dichotomique.
Je cherche l'indice de l'élément e
dans t
du début (inclus) à la fin (exclus):
- Si j'ai un tableau vide alors je ne peux pas trouver la valeur
e
- Sinon Je compare
e
à l'élément qui se trouve au milieu t[milieu]
- Si
t[milieu] == e
, j'ai terminé et je renvoie l'indice milieu
- Si
t[milieu] < e
, je recommence en 1 et cherche l'élément e
entre le milieu
(exclus) et la fin
- Si
t[milieu] > e
, je recommence en 1 et cherche l'élément e
entre le début et le milieu
(exclus)