sujet_DS_Java
sujet_DS_Java
sujet_DS_Java
Exercice 1
Considérons une classe Java appelée MaDate ayant les trois attributs suivants :
• jour : un attribut privé de type entier.
• mois : un attribut privé de type entier.
• année : un attribut privé de type entier.
1. Créez la classe MaDate
2. Redéfinissez la méthode toString() afin que nous puissions afficher une date sous le format
jour/mois/année.
3. Générez (ou écrivez) les getters et setters des trois attributs.
4. Définissez un constructeur avec trois paramètres MaDate(int jour, int mois, int année)
5. Écrivez la méthode ajouterUnJour qui permet d’ajouter un jour à notre date et faire des
modifications, si nécessaire, pour les deux attributs mois et année. Attention, il faut traiter
tous les cas. Par example si les trois attributs jour, mois et année contiennent respectivement
les valeurs 31, 12 et 2016, alors la méthode ajouterUnJour doit affecter la valeur 1 à jour,
1 à mois et 2017 à année. Et s’ils contiennent 28, 02 et 2018 alors les nouvelles valeurs après
modification seront respectivement 29, 02 et 2018.
6. Utilisez la méthode de la question précédente pour écrire la méthode ajouterPlusieursJours(int
n) : n étant le nombre de jours à ajouter à la date enregistrée dans les trois attributs.
7. D’une façon similaire, définissez les méthodes ajouterUnMois et ajouterUnAn().
8. Dans la méthode main, testez toutes les méthodes réalisées dans les questions précédentes.
Exercice 2
Considérons une classe Java appelée Stagiaire ayant les attributs suivants :
• nom : un attribut privé de type chaı̂ne de caractère
• notes : un attribut privé de type tableau de trois entiers
1. Créez la classe Stagiaire
2. Générez les getters et setters des deux attributs.
3. Définissez un constructeur avec deux paramètres Stagiaire(String nom, int note)
4. Écrivez la méthode calculerMoyenne() qui permet de calculer la moyenne des notes d’un
stagiaire
5. Écrivez les méthodes trouverMax() et trouverMin() qui permettent de chercher respective-
ment la note max et min d’un stagiaire.
Considérons maintenant une classe appelée Formation ayant les attributs suivants :
• intitulé : un attribut privé de type chaı̂ne de caractère
• nbrJours : un attribut privé de type entier
• stagiaires : un tableau d’objets de type Stagiaire
6. Créez la classe Formation, générez les getters et setters de ses attributs, et définissez le construc-
teur Formation(String intitulé, int nbrJours, Stagiaire [] stagiaires)
7. Écrivez une méthode calculerMoyenneFormation() qui calcule la moyenne d’un objet de type
formation (la moyenne des moyennes des stagiaires)
8. Écrivez une méthode afficherNomMax() qui affiche le nom du stagiaire ayant la meilleure
moyenne d’une formation.
9. Écrivez une méthode afficherMinMax() qui affiche la note minimale du stagiaire ayant la
meilleure moyenne d’une formation.
10. Écrivez une méthode trouverMoyenneParNom(String nom) qui affiche la moyenne du stagiaire
dont le nom est passé en paramètre.
11. Dans la méthode main de la classe principale Main, testez toutes les méthodes réalisées dans
les questions précédentes (créez par example trois objets Stagiaire et affectez les à une même
formation et faites appel aux quatre dernières méthodes que vous avez implémentées).
Exercice 3
Considérons une classe Java appelée Point ayant les attributs suivants :
• abs : un attribut privé de type float
• ord : un attribut privé de type float
1. Créez la classe Point
2. Générez les getters et setters des deux attributs.
3. Définissez un constructeur avec deux paramètres Point(float abs, float ord)
4. Écrivez la méthode calculerDistance(Point p) qui permet de calculer la distance entre le
point de l’objet courant (this) et l’objet Point p passé en paramètre. Nous rappelons que la
distance
p entre deux points A(x1 ,y1 ) et B(x2 ,y2 ), en mathématiques, est égale à :
(x1 − x2 )2 + (y1 − y2 )2 )
5. Écrivez la calculerMilieu(Point p) qui permet de calculer et de retourner un objet corres-
pondant au milieu du segment défini par le point de l’objet courant (this) et l’objet Point
p passé en paramètre. Nous rappelons que les coordonnées d’un point M(xM ,yM ) milieu de
A(x1 ,y1 ) et B(x2 ,y2 ), en mathématiques, sont :
x1 + x2
• xM =
2
y1 + y2
• yM =
2
La méthode doit retourner un objet Point et pas les coordonnées.
Considérons maintenant une deuxième classe appelée TroisPoints ayant les attributs suivants :
• premier : un attribut privé de type Point
• deuxième : un attribut privé de type Point
• troisième : un attribut privé de type Point
6. Générez les getters/setters et le constructeur avec trois paramètres de la classe TroisPoints.
7. Écrivez une méthode testerAlignement() qui retourne true si les trois points premier,
deuxième et troisième sont alignés, false sinon. Nous rappelons que trois points A, B et
C sont alignés si AB = AC + BC, AC = AB + BC ou BC = AC + AB (AB désigne la distance
séparant le point A du point B, pareillement pour AC et BC).
8. Écrivez une méthode estTriangleEquilateral() qui retourne true si les trois points premier,
deuxième et troisième forment un triangle équilatéral, false sinon. Nous rappelons qu’un
triangle ABC est équilatéral si AB = AC = BC.
9. Dans la méthode main() de la classe principale Main, demandez à l’utilisateur de saisir les
coordonnées de trois points. Ensuite, utilisez les classes et les méthodes précédentes pour afficher
tous les détails sur ces trois points, les milieux, les distances qui les séparent, afficher s’ils sont
alignés, s’ils forment un triangle équilatéral...
Exercice 4
Considérons les deux classes Java Personne et Adresse. Les attributs de la classe Adresse sont :
• rue : un attribut privé de type chaı̂ne de caractère.
• ville : un attribut privé de type chaı̂ne de caractère.
• codePostal : un attribut privé de type chaı̂ne de caractère.
Les attributs de la classe Personne sont :
• nom : un attribut privé de type chaı̂ne de caractère.
• sexe : un attribut privé de type caractère (cet attribut aura comme valeur soit ’M’ soit ’F’).
• adresses : un attribut privé de type tableau d’objet de la classe Adresse.
1. Créez les deux classes Adresse et Personne dans deux fichiers séparés. N’oubliez pas de générer
les getters/setters et le(s) constructeur(s).
2. Créez une troisième classe ListePersonnes ayant un seul attribut personnes qui est tableau
de maximum 10 objets de la classe Personne. Générez les getters/setters et le constructeur de
cette classe.
3. Écrivez la findByNom(String s) qui permet de chercher dans le tableau personnes si un objet
dont le nom égal au paramètre s existe. Si c’est le cas, elle retourne l’objet correspondant, sinon
null.
4. Écrivez la méthode findByCodePostal(String cp) qui permet de vérifier dans le tableau
personnes si un objet possède au moins une adresse dont le code postal égal au paramètre cp.
Si c’est le cas, elle retourne true, sinon false.
5. Écrivez la méthode countPersonneVille(String ville) qui permet de calculer le nombre
d’objets dans le tableau personnes ayant une adresse dans la ville passée en paramètre.
6. Écrivez la méthode editPersonneNom(String oldNom, String newNom) qui remplace les noms
de personnes ayant un nom égal à la valeur dans oldNom par newNom
7. Écrivez la méthode editPersonneVille(String nom, String newVille) qui remplace les
villes de personnes ayant un nom égal à la valeur du paramètre oldNom par newVille
Exercice 5
1. Écrire la classe Plaque qui représente une plaque rectangulaire uniquement caractérisée par sa
longueur et sa largeur (en centimètres).
2. Écrire le constructeur qui prend deux entiers en paramètre et attribue le plus grand entier à la
longueur de la plaque et le plus petit entier à sa largeur
3. Écrire la méthode decoupeSensLongueur(int n), qui découpe une largeur de plaque de n
centimètres dans le sens de la longueur (et c’est donc sa largeur qui diminue) et retourne la
plaque qui en a été extraite. Ex : si on découpe 30 cm dans le sens de la longueur d’une plaque
de dimensions 100 × 200, on extrait une plaque de dimensions 30 × 200 et la plaque d’origine
n’est plus que de dimensions 70 × 200
4. Écrire la méthode decoupeSensLargeur(int n) qui fait la même chose mais dans le sens de
la largeur et, le cas échéant, réoriente la plaque (c’est-à-dire, échange les valeurs de la largeur
et de la longueur) si sa longueur est devenue plus petite que sa largeur.
5. Écrire une classe Barreau qui représente une plaque dont la largeur est normalement de 3 cm
et qu’on ne peut découper que dans le sens de la largeur. On va réutiliser la classe Plaque
pour écrire la classe Barreau. Expliquer d’abord pourquoi ce serait une mauvaise idée de faire
hériter la classe Barreau de la classe Plaque. Ensuite, écrire la classe Barreau en la composant
avec la classe Plaque.
6. Écrire un constructeur pour la classe Barreau qui prend en paramètre une plaque
7. Écrire la méthode decoupeSensLargeur(int n) qui fait la même chose que celle de Plaque
8. Écrire la méthode conforme() qui indique si la largeur du barreau est bien de 3 cm.
9. Écrire la classe TabouretEnKit qui représente un tabouret constitué d’une plaque normalement
carrée servant d’assise et de quatre barreaux servant de pieds.
10. Écrire également un constructeur de la classe TabouretEnKit prenant en paramètre une plaque
et quatre barreaux
11. Écrire les méthodes largeur() et hauteur() qui retournent respectivement la largeur du ta-
bouret, c’est-à-dire la largeur de son assise, et la hauteur du tabouret, c’est-à-dire la longueur
d’un de ses pieds
12. Écrire la méthode conforme() qui indique si l’assise est carrée et les pieds sont tous conformes
et tous de même longueur.
13. Écrire la classe ChaiseEnKit qui hérite de TabouretEnKit et représente un tabouret muni
d’une plaque servant de dossier. Cette classe possède les mêmes méthodes que TabouretEnKit
sauf que son constructeur prend une plaque (pour le dossier) comme paramètre supplémentaire,
que sa conformité nécessite en plus que la largeur du dossier soit la même que celle du tabouret
et que la hauteur de la chaise prenne en compte le dossier.