Menu
Coddy logo textTech

Récapitulatif - Enum Shape

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

challenge icon

Défi

Facile

Construisons un calculateur de géométrie qui utilise une énumération pour représenter différentes formes, chacune stockant ses propres dimensions. Votre énumération Shape démontrera comment un type unique peut contenir différentes structures de données et fournir un comportement unifié via des méthodes.

Vous allez créer deux fichiers pour organiser votre code :

  • shape.rs : Définissez une énumération publique Shape avec deux variantes :
    • Circle — contient un seul f64 représentant le rayon (syntaxe de tuple)
    • Rectangle — contient des champs nommés : width (f64) et height (f64)
    Implémentez une méthode area qui utilise le filtrage par motif (pattern matching) pour calculer l'aire correcte en fonction de la variante. Pour les cercles, utilisez 3.14159 comme π.
  • main.rs : Importez votre module shape, créez une instance de chaque variante de forme en utilisant les entrées fournies, et affichez l'aire de chaque forme.

Votre méthode area doit retourner un f64. Lors du matching, déstructurez chaque variante pour extraire ses dimensions et appliquez la formule appropriée :

  • Aire du cercle : π × radius²
  • Aire du rectangle : width × height

Votre sortie doit afficher l'aire de chaque forme sur sa propre ligne, avec exactement une décimale :

Circle area: {area}
Rectangle area: {area}

Par exemple, avec un rayon de cercle de 5.0 et un rectangle avec une largeur de 4.0 et une hauteur de 6.0, la sortie serait :

Circle area: 78.5
Rectangle area: 24.0

Vous recevrez trois entrées : le rayon du cercle, la largeur du rectangle et la hauteur du rectangle.

Essayez vous-même

mod shape;

use shape::Shape;

fn main() {
    // Lire les entrées
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

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

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

    // TODO: Créer une forme Circle en utilisant le radius
    
    // TODO: Créer une forme Rectangle en utilisant width et height
    
    // TODO: Afficher l'aire de chaque forme avec une décimale
    // Format: "Circle area: {area}" et "Rectangle area: {area}"
}

Toutes les leçons de Object Oriented Programming