-
Cours :
- cours 1 transparents : pdf
- cours 2 transparents : pdf
- cours 3 transparents : pdf
- cours 4 transparents : pdf
- cours 5 transparents : pdf
- cours 6 transparents : pdf
- cours 7 transparents : pdf
- cours 8 transparents : pdf
- cours 9 transparents : pdf
- cours 10 transparents : pdf
- cours 11 transparents : pdf
- cours 12 transparents : pdf
- Documents :
- TD :
- TP :
- TP 8 (pdf)
- TP 9 (pdf)
- TP 10 (pdf), Corrigé TP 10 (pdf)
- Projet astéroïdes (pdf)
TD 5 : Application de la classe Point
Application de la classe Point
On va réutiliser la classe Point
qu’on a définie dans un exercice précédent (avec quelques méthodes supplémentaires). Le code de la classe Point
est le suivant :
public class Point {
public final int x;
public final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public double distanceTo(Point p){
return Math.hypot(this.x - p.x, this.y - p.y);
}
public Point translate(int dx, int dy) {
return new Point(x + dx, y + dy);
}
public String toString(){
return "(" + this.x + "," + this.y + ")";
}
public boolean equals(Point p){
return this.x == p.x && this.y == p.y;
} }
On veut créer une classe pour représenter une ligne polygonale. Une ligne polygonale est une figure géométrique formée d’une suite de segments de droites reliant une suite de points. Une ligne polygonale est donc définie par un certain nombre de points qu’on appelle ses sommets. On va définir une classe PolygonalChain
pour représenter de tels objets. Les sommets y seront mémorisés sous forme de tableau de points.
Cette classe PolygonalChain
comportera donc :
un attribut :
Point[] vertices
: le tableau des points qui sont les sommets de la ligne polygonale.
des constructeurs :
PolygonalChain(int size)
: constructeur d’une ligne polygonale àsize
sommets, les sommets n’étant pas définis.PolygonalChain(Point [] vertices)
: constructeur d’une ligne polygonale ayant les sommets indiqués en argument.
des méthodes :
Point getVertex(int index)
: renvoie le sommet numéroindex
de la ligne.void setVertex(int index, Point p)
: fixe la valeur du sommet numéroindex
àp
.String toString()
: renvoie une expression de la ligne polygonale sous forme de texte. Pour une ligne polygonale composée des points (1,1), (2,2) et (-3,3), la méthodetoString
devra retourner la chaîne de caractères[(1,1), (2,2), (-3,3)]
.void translate(int dx, int dy)
qui applique à chaque sommet la ligne polygonale une translation de vecteur \((dx, dy)\).int size()
qui renvoie le nombre de points de la ligne polygonale.double length()
qui renvoie la longueur de la ligne polygonale, c’est-à-dire la somme des longueurs des segments qui la composent.boolean isClosed()
qui renvoietrue
si la chaîne est fermée, c’est-à-dire que son premier sommet est égal à son dernier sommet.
Question 1 : D’après vous quel modificateur d’accès
public
ouprivate
doit-on utiliser pour les attributs, méthodes et constructeurs de la classePolygonalChain
?
Question 2 : Donnez le code de
PolygonalChain(int size)
.
Question 3 : Donnez le code de
toString()
.
On suppose que le code de PolygonalChain(Point[] vertices)
est le suivant :
public PolygonalChain(Point[] vertices) {
this.vertices = vertices;
}
On considère le code suivant :
public class Main {
public static void main(String[] args){
Point[] points = { new Point(1,1), new Point(2,2)};
new PolygonalChain(points);
PolygonalChain polygonalChain = 1] = new Point(3,3);
points[System.out.println(polygonalChain.toString());
} }
Question 4 : Quel est l’affichage produit par le code ci-dessus ?
Question 5 : Est-ce que cela vous parait être un comportement normal ? Comment peut-on le corriger ?
Question 6 : Donnez le code des méthodes suivantes :
Point getVertex(int index)
void setVertex(int index, Point p)
void translate(int dx, int dy)
double length()
boolean isClosed()
Vecteur d’entiers (bonus)
Le but de cet exercice est de coder une classe Vector
qui permet de gérer un tableau dont la capacité augmente automatiquement quand celui-ci est plein. Cette classe contient deux attributs : un tableau d’entiers array
et un entier size
. La longueur du tableau array
peut être supérieure à size
. Néanmoins, les entiers réellement présents dans le vecteur sont stockés dans les size
premières cases du tableau array
. Le constructeur prend en paramètre la longueur initiale du tableau array
, c’est-à-dire la capacité initiale du vecteur. Si la longueur du tableau array
ne permet plus de conserver tous les éléments du vecteur, elle est automatiquement augmentée à l’aide de la méthode ensureCapacity
. La classe fournit les méthodes suivantes :
void ensureCapacity(int capacity)
fait en sorte que le tableauarray
puisse contenircapacity
éléments. Si la capacité actuelle du vecteur est inférieure àcapacity
, la capacité est augmentée. La nouvelle capacité doit être égale à \(\max(capacity,2\times capacit\acute{e}~actuelle)\). Les nouvelles cases du tableau array sont initialisées à zéro. Le nombre d’éléments (c’est-à-dire la valeur de size) n’est pas modifié.void resize(int size)
modifie la taille du vecteur. Si la capacité est inférieure àsize
, elle est augmentée et les nouvelles cases sont initialisées à zéro.int size()
retourne la taille actuelle du vecteur.boolean isEmpty()
teste si le vecteur est vide.void add(int value)
ajoute l’entiervalue
à la fin du vecteur.void set(int index, int value)
affecte l’élémentvalue
à la position index dans le tableau. Si le tableau contient moins deindex+1
éléments, la méthode ne fait rien.int get(int index)
retourne l’élément à la positionindex
dans le vecteur. Si le vecteur contient moins deindex+1
éléments, la méthode retourne0
.
Question 7 : Donnez le code de la classe
Vector
.