Menu
Coddy logo textTech

Flächenrechner für Formen

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 61 von 61.

challenge icon

Aufgabe

Einfach

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

Erstelle einen Flächenrechner für Formen, der die Leistungsfähigkeit von Trait-Objekten und Polymorphie demonstriert! Du erstellst ein System, in dem verschiedene Formen, Kreise und Quadrate, gemeinsam in einer einzigen Sammlung gespeichert werden können und ihre Gesamtfläche über eine einheitliche Schnittstelle berechnet wird.

Du organisierst deinen Code über drei Dateien:

  • shape.rs: Definiere das Shape-Trait mit einer area-Methode, die ein f64 zurückgibt. Dieses Trait legt den Vertrag fest, den alle Formen erfüllen müssen.
  • shapes.rs: Erstelle zwei Structs, die dein Trait implementieren. Ein Circle hat einen radius (f64), und ein Square hat eine side (f64). Jedes Struct sollte das Shape-Trait mit seiner entsprechenden Flächenformel implementieren. Verwende für Kreise 3.14159 als π.
  • main.rs: Binde beide Module ein und erstelle eine total_area-Funktion, die ein Vec<Box<dyn Shape>> akzeptiert und die Summe aller Flächen zurückgibt. Erstelle mithilfe der vorgegebenen Eingaben einen Kreis und ein Quadrat, speichere sie in einem Vektor von Trait-Objekten, berechne die Gesamtfläche und gib das Ergebnis aus.

Die Flächenformeln lauten:

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

Deine 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

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

Und mit den Eingaben 1.0 und 4.0:

Total area: 19.14159

Du erhältst zwei Eingaben: den Radius des Kreises und die Seitenlänge des Quadrats (parse beide als f64).

Probier es selbst

mod shape;
mod shapes;

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

// TODO: Implementiere die total_area Funktion
// Sie sollte einen 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 gegebenen Radius
    // TODO: Erstelle ein Square mit der gegebenen Seite
    // TODO: Speichere beide Formen in einem Vec<Box<dyn Shape>>
    // TODO: Rufe total_area auf und gib das Ergebnis im Format aus: "Total area: {total}"
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler