Ajout des fichiers issus de la correction

This commit is contained in:
Vincent Guillet
2025-04-28 18:35:00 +02:00
parent c87dd9805d
commit 8f83f07d0d
6 changed files with 281 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
package com.humanbooster.exercices;
public interface Calculable {
/**
* calcule l'aire d'une forme
* @return l'aire de la forme
*/
public double calculerAire();
/**
* Calcule le perimetre d'une forme
* @return le perimetre de la forme
*/
public double calculerPerimetre();
}

View File

@@ -0,0 +1,47 @@
package com.humanbooster.exercices;
public class Cercle implements Calculable, Dessinable {
private double rayon;
private static final double PI = Math.PI;
public Cercle(double rayon) {
if (rayon < 0) {
throw new IllegalArgumentException("Le rayon ne peut pas être négatif");
}
this.rayon = rayon;
}
@Override
public double calculerAire() {
return PI * rayon * rayon;
}
@Override
public double calculerPerimetre() {
return 2 * PI * rayon;
}
@Override
public void dessiner() {
int r = (int) rayon;
int diametre = 2 * r;
for (int i = 0; i <= diametre; i++) {
for (int j = 0; j <= diametre; j++) {
double di = i - r;
double dj = j - r;
// Vérifie si le cercle interne tracé est arrivé à son maximum
if ((di * di) + (dj * dj) <= r * r ) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.err.println("");
}
}
}

View File

@@ -0,0 +1,15 @@
package com.humanbooster.exercices;
public interface Dessinable {
/**
* Affiche une représentation ASCII de la forme dans la console
*/
public void dessiner();
/**
* Donne la description de la forme
* @return la description de la forme
*/
public String obtenirDescription();
}

View File

@@ -0,0 +1,73 @@
package com.humanbooster.exercices;
import java.util.ArrayList;
import java.util.List;
public class GestionnaireFormes {
private List<Calculable> formesCalculables = new ArrayList<>();
private List<Dessinable> formesDessinables = new ArrayList<>();
// public void ajouterForme(Calculable calculable, Dessinable dessinable) {
// formesCalculables.add(calculable);
// formesDessinables.add(dessinable);
// }
public void ajouterForme(Object forme) throws IllegalArgumentException {
if (!(forme instanceof Calculable) && !(forme instanceof Dessinable) ) {
throw new IllegalArgumentException();
}
if (forme instanceof Calculable) {
formesCalculables.add((Calculable)forme);
}
if (forme instanceof Dessinable) {
formesDessinables.add((Dessinable)forme);
}
}
public void dessinerTout() {
for (Dessinable dessinable : formesDessinables) {
dessinable.dessiner();
}
}
public void afficherAirePerimetre() {
// for (Calculable calculable : formesCalculables) {
// System.out.println("Aire : " + calculable.calculerAire() + "Perimetre : " + calculable.calculerPerimetre());
// }
formesDessinables.forEach(forme -> {
forme.dessiner();
});
}
public double calculerPerimetreTotal() {
return formesCalculables.stream()
.mapToDouble(Calculable::calculerPerimetre)
.sum();
}
public double calculerAireTotale() {
return formesCalculables.stream()
.mapToDouble(Calculable::calculerAire)
.sum();
}
public int getNombreFormesCalculables() {
return formesCalculables.size();
}
}

View File

@@ -0,0 +1,73 @@
package com.humanbooster.exercices;
public class Rectangle implements Calculable, Dessinable {
private double longueur;
private double largeur;
public Rectangle(double longueur, double largeur) {
if (longueur < 0 || largeur < 0) {
throw new IllegalArgumentException("Les dimensions ne peuvent pas être négatives");
}
this.longueur = longueur;
this.largeur = largeur;
}
@Override
public double calculerAire() {
return longueur * largeur;
}
@Override
public double calculerPerimetre() {
return 2 * (longueur + largeur);
}
@Override
public void dessiner() {
int hauteur = Math.min((int) Math.ceil(largeur), 20);
int largeurAffichage = Math.min((int) Math.ceil(longueur), 40);
System.out.print("+");
for (int i = 0; i < largeurAffichage; i++) {
System.out.print("-");
}
System.out.println("+");
for (int i = 0; i < hauteur; i++) {
System.out.print("|");
for (int j = 0; j < largeurAffichage; j++) {
System.out.print(" ");
}
System.out.println("|");
}
System.out.print("+");
for (int i = 0; i < largeurAffichage; i++) {
System.out.print("-");
}
System.out.println("+");
}
@Override
public String obtenirDescription() {
return String.format("Longueur: %.2f Largeur: %.2f (Aire: %.2f, Perimetre: %.2f)", longueur, largeur, calculerAire(), calculerPerimetre());
}
// " je suis {nom} et j'ai {age} ans"
}

View File

@@ -0,0 +1,57 @@
package com.humanbooster.exercices;
public class Triangle implements Calculable, Dessinable {
private double base;
private double hauteur;
public Triangle(double base, double hauteur) {
if (base < 0 || hauteur < 0) {
throw new IllegalArgumentException("Les dimensions ne peuvent pas etre negatives");
}
this.base = base;
this.hauteur = hauteur;
}
@Override
public double calculerAire() {
return (base * hauteur) / 2;
}
@Override
public double calculerPerimetre() {
double cote = Math.sqrt((base / 2) * (base / 2) + hauteur * hauteur);
return base + 2 * cote;
}
@Override
public void dessiner() {
int h = (int) hauteur;
int b = (int) base;
for (int i = 0; i < h; i++) {
// Parcourt les espaces à gauche
for (int j = 0; j < (b / 2) - (i * b / (2 * h)); j++) {
System.out.print(" ");
}
System.out.print("/");
// Parcourt mes eespaces entre slashs
for (int j = 0; j < 2 * (i * b / (2 * h)); j++) {
System.out.print(" ");
}
System.out.println("\\");
}
for (int i = 0; i < b; i++) {
System.out.print("-");
}
System.out.println();
}
@Override
public String obtenirDescription() {
return "";
}
}