diff --git a/com/humanbooster/exercices/Calculable.java b/com/humanbooster/exercices/Calculable.java new file mode 100644 index 0000000..f2a1a05 --- /dev/null +++ b/com/humanbooster/exercices/Calculable.java @@ -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(); +} diff --git a/com/humanbooster/exercices/Cercle.java b/com/humanbooster/exercices/Cercle.java new file mode 100644 index 0000000..c192737 --- /dev/null +++ b/com/humanbooster/exercices/Cercle.java @@ -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(""); + } + } + + +} diff --git a/com/humanbooster/exercices/Dessinable.java b/com/humanbooster/exercices/Dessinable.java new file mode 100644 index 0000000..7f82f4a --- /dev/null +++ b/com/humanbooster/exercices/Dessinable.java @@ -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(); +} diff --git a/com/humanbooster/exercices/GestionnaireFormes.java b/com/humanbooster/exercices/GestionnaireFormes.java new file mode 100644 index 0000000..649da55 --- /dev/null +++ b/com/humanbooster/exercices/GestionnaireFormes.java @@ -0,0 +1,73 @@ +package com.humanbooster.exercices; + +import java.util.ArrayList; +import java.util.List; + +public class GestionnaireFormes { + private List formesCalculables = new ArrayList<>(); + private List 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(); + } + +} + + diff --git a/com/humanbooster/exercices/Rectangle.java b/com/humanbooster/exercices/Rectangle.java new file mode 100644 index 0000000..d945a2e --- /dev/null +++ b/com/humanbooster/exercices/Rectangle.java @@ -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" + + + +} + + diff --git a/com/humanbooster/exercices/Triangle.java b/com/humanbooster/exercices/Triangle.java new file mode 100644 index 0000000..95733e5 --- /dev/null +++ b/com/humanbooster/exercices/Triangle.java @@ -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 ""; + } +}