Menu
Coddy logo textTech

Flächenrechner für Formen

Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 61 von 61.

challenge icon

Aufgabe

Einfach

Diese abschließende Herausforderung führt Traits, Trait-Objekte und Polymorphismus zusammen, um ein praktisches Problem zu lösen: die Berechnung der Gesamtfläche verschiedener Formen, die in einer einzigen Sammlung gespeichert sind.

Lassen Sie uns einen Flächenrechner für Formen bauen, der die Leistungsfähigkeit von Trait-Objekten und Polymorphismus demonstriert! Sie werden ein System erstellen, in dem verschiedene Formen – Kreise und Quadrate – zusammen in einer einzigen Sammlung gespeichert werden können und deren Gesamtfläche über eine einheitliche Schnittstelle berechnet wird.

Sie werden Ihren Code auf drei Dateien verteilen:

  • shape.rs: Definieren Sie den Shape-Trait mit einer area-Methode, die ein f64 zurückgibt. Dieser Trait legt den Vertrag fest, den alle Formen erfüllen müssen.
  • shapes.rs: Erstellen Sie zwei Structs, die Ihren Trait implementieren. Ein Circle hat einen radius (f64) und ein Square hat eine side (f64). Jedes Struct sollte den Shape-Trait mit der entsprechenden Flächenformel implementieren. Verwenden Sie für Kreise 3.14159 als π.
  • main.rs: Binden Sie beide Module ein und erstellen Sie eine total_area-Funktion, die einen Vec<Box<dyn Shape>> akzeptiert und die Summe aller Flächen zurückgibt. Erstellen Sie unter Verwendung der bereitgestellten Eingaben einen Kreis und ein Quadrat, speichern Sie diese in einem Vektor von Trait-Objekten, berechnen Sie die Gesamtfläche und geben Sie das Ergebnis aus.

Die Flächenformeln lauten:

  • Kreis: 3.14159 × radius × radius
  • Quadrat: side × side

Ihre Ausgabe sollte die Gesamtfläche aller Formen anzeigen:

Total area: {total}

Zum Beispiel mit den Eingaben 2.0 (Kreisradius) und 3.0 (Quadratseite):

Total area: 21.56636

Dies liegt daran: Kreisfläche = 3.14159 × 2² = 12.56636, Quadratfläche = 3² = 9, Gesamt = 21.56636

Und mit den Eingaben 1.0 und 4.0:

Total area: 19.14159

Sie erhalten zwei Eingaben: den Radius des Kreises und die Seitenlänge des Quadrats (parsen Sie beide als f64).

Probier es selbst

mod shape;
mod shapes;

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

// TODO: Implementiere die Funktion total_area
// Sie sollte ein Vec<Box<dyn Shape>> akzeptieren und die Summe aller Flächen als f64 zurückgeben
fn total_area(shapes: Vec<Box<dyn Shape>>) -> f64 {
    // TODO: Berechne und gib die Summe aller Formflächen zurück
    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: Erstelle einen Circle mit dem angegebenen Radius
    // TODO: Erstelle ein Square mit der angegebenen Seitenlänge
    // TODO: Speichere beide Formen in einem Vec<Box<dyn Shape>>
    // TODO: Rufe total_area auf und gib das Ergebnis im Format "Total area: {total}" aus
}

Alle Lektionen in Object Oriented Programming