Menu
Coddy logo textTech

Calculateur d'aire de formes

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 61 sur 61.

challenge icon

Défi

Facile

Ce défi final rassemble les traits, les objets de trait et le polymorphisme pour résoudre un problème pratique : calculer l'aire totale de différentes formes stockées dans une seule collection.

Construisons un calculateur d'aire de formes qui démontre la puissance des objets de trait et du polymorphisme ! Vous allez créer un système où différentes formes — cercles et carrés — peuvent être stockées ensemble dans une seule collection et voir leur aire totale calculée via une interface unifiée.

Vous organiserez votre code sur trois fichiers :

  • shape.rs : Définissez le trait Shape avec une méthode area qui retourne un f64. Ce trait établit le contrat que toutes les formes doivent remplir.
  • shapes.rs : Créez deux structures qui implémentent votre trait. Un Circle possède un radius (f64), et un Square possède un side (f64). Chaque structure doit implémenter le trait Shape avec sa formule d'aire appropriée. Pour les cercles, utilisez 3.14159 comme π.
  • main.rs : Importez les deux modules et créez une fonction total_area qui accepte un Vec<Box<dyn Shape>> et retourne la somme de toutes les aires. En utilisant les entrées fournies, créez un cercle et un carré, stockez-les dans un vecteur d'objets de trait, calculez l'aire totale et affichez le résultat.

Les formules d'aire sont :

  • Cercle : 3.14159 × radius × radius
  • Carré : side × side

Votre sortie doit afficher l'aire totale de toutes les formes :

Total area: {total}

Par exemple, avec les entrées 2.0 (rayon du cercle) et 3.0 (côté du carré) :

Total area: 21.56636

C'est parce que : Aire du cercle = 3.14159 × 2² = 12.56636, Aire du carré = 3² = 9, Total = 21.56636

Et avec les entrées 1.0 et 4.0 :

Total area: 19.14159

Vous recevrez deux entrées : le rayon du cercle et la longueur du côté du carré (analysez les deux comme f64).

Essayez vous-même

mod shape;
mod shapes;

use shape::Shape;
use shapes::{Circle, Square};

// TODO: Implémenter la fonction total_area
// Elle doit accepter un Vec<Box<dyn Shape>> et retourner la somme de toutes les aires en tant que f64
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Calculer et retourner la somme des aires de toutes les formes
    0.0
}

fn main() {
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let radius: f64 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let side: f64 = input2.trim().parse().expect("Invalid number");

    // TODO: Créer un Circle avec le rayon donné
    // TODO: Créer un Square avec le côté donné
    // TODO: Stocker les deux formes dans un Vec<Box<dyn Shape>>
    // TODO: Appeler total_area et afficher le résultat au format : "Total area: {total}"
}

Toutes les leçons de Object Oriented Programming