Menu
Coddy logo textTech

Structs als Funktionsparameter

Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 24 von 66.

Da du nun weißt, wie man Structs erstellt und verändert, wollen wir erkunden, wie man sie mit Funktionen verwendet. Genau wie jeden anderen Datentyp in Rust kannst du Struct-Instanzen an Funktionen übergeben und sie von Funktionen zurückgeben.

Um eine Struktur an eine Funktion zu übergeben, fügst du sie einfach als Parameter in der Funktionsdefinition ein:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

Diese Funktion nimmt eine Rectangle-Struktur als Parameter entgegen und gibt einen i32-Wert zurück. Innerhalb der Funktion können Sie auf die Felder der Struktur mithilfe der Punktnotation zugreifen, genau wie an jeder anderen Stelle auch.

Du kannst auch Strukturen aus Funktionen zurückgeben, indem du den Strukturtyp als Rückgabetyp angibst:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

Die Verwendung von Structs mit Funktionen macht Ihren Code organisierter und aussagekräftiger. Anstatt mehrere einzelne Parameter zu übergeben, können Sie zusammengehörige Daten gruppieren und sie als eine einzige, gut definierte Einheit übergeben.

challenge icon

Aufgabe

Einfach

Du erhältst vier Eingaben: die Breite eines Rechtecks (als Ganzzahl), die Höhe eines Rechtecks (als Ganzzahl), die Seitenlänge eines Quadrats (als Ganzzahl) und eine Auswahlzahl (1 oder 2). Definiere eine Rectangle-Struktur mit zwei Feldern: width: i32 und height: i32. Erstelle zwei Funktionen: eine, die ein Rectangle entgegennimmt und dessen Fläche berechnet, und eine weitere, die eine Seitenlänge entgegennimmt und ein Rectangle zurückgibt, das ein Quadrat darstellt. Berechne abhängig von der Auswahl die entsprechende Fläche und gib sie aus.

Anforderungen:

  • Definiere eine Rectangle-Struktur mit den Feldern: width: i32 und height: i32
  • Erstelle eine Funktion calculate_area, die ein Rectangle als Parameter entgegennimmt und ein i32 (die Fläche) zurückgibt
  • Erstelle eine Funktion create_square, die ein i32 (die Seitenlänge) als Parameter entgegennimmt und ein Rectangle mit gleicher Breite und Höhe zurückgibt
  • Lies die erste Eingabe ein und wandle sie für die Breite des Rechtecks in i32 um
  • Lies die zweite Eingabe ein und wandle sie für die Höhe des Rechtecks in i32 um
  • Erstelle eine Rectangle-Instanz mit diesen Abmessungen
  • Lies die dritte Eingabe ein und wandle sie für die Seitenlänge des Quadrats in i32 um
  • Lies die vierte Eingabe ein und wandle sie für die Auswahl (1 oder 2) in i32 um
  • Wenn die Auswahl 1 ist: Berechne die Fläche des Rechtecks und gib sie aus
  • Wenn die Auswahl 2 ist: Erstelle mit create_square ein Quadrat, berechne anschließend dessen Fläche und gib sie aus

Eingabe:

  • Erste Zeile: Breite des Rechtecks als Ganzzahl (z. B. 8)
  • Zweite Zeile: Höhe des Rechtecks als Ganzzahl (z. B. 5)
  • Dritte Zeile: Seitenlänge des Quadrats als Ganzzahl (z. B. 6)
  • Vierte Zeile: Auswahl als Ganzzahl, entweder 1 oder 2 (z. B. 1)

Ausgabe:

  • Wenn die Auswahl 1 ist: Rectangle area: [area]
  • Wenn die Auswahl 2 ist: Square area: [area]

Probier es selbst

use std::io;

// TODO: Definiere hier das Rectangle-Struct


// TODO: Definiere hier die Funktion calculate_area


// TODO: Definiere hier die Funktion create_square


fn main() {
    // Rechteckbreite einlesen
    let mut width_input = String::new();
    io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: i32 = width_input.trim().parse().expect("Invalid input");
    
    // Rechteckhöhe einlesen
    let mut height_input = String::new();
    io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: i32 = height_input.trim().parse().expect("Invalid input");
    
    // Quadratseitenlänge einlesen
    let mut side_input = String::new();
    io::stdin().read_line(&mut side_input).expect("Failed to read line");
    let side: i32 = side_input.trim().parse().expect("Invalid input");
    
    // Auswahl einlesen
    let mut choice_input = String::new();
    io::stdin().read_line(&mut choice_input).expect("Failed to read line");
    let choice: i32 = choice_input.trim().parse().expect("Invalid input");
    
    // TODO: Schreibe deinen Code unten
    // Erstelle eine Rectangle-Instanz, prüfe die Auswahl und berechne die entsprechende Fläche
    
    
    // Ergebnis basierend auf der Auswahl ausgeben
    // Verwende: println!("Rectangle area: {}", area); oder println!("Square area: {}", area);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Kontrollfluss

Übe selbstständig: Online-Rust-Compiler