Menu
Coddy logo textTech

Struktury jako parametry funkcji

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 24 z 66.

Teraz, gdy wiesz już, jak tworzyć i modyfikować struktury, przyjrzyjmy się temu, jak używać ich w funkcjach. Tak jak każdy inny typ danych w Rust, instancje struktur możesz przekazywać do funkcji i zwracać z funkcji.

Aby przekazać strukturę do funkcji, po prostu uwzględnij ją jako parametr w definicji funkcji:

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

Ta funkcja przyjmuje strukturę Rectangle jako parametr i zwraca i32. Wewnątrz funkcji możesz uzyskać dostęp do pól struktury za pomocą notacji kropkowej, tak jak w każdym innym miejscu.

Możesz również zwracać struktury z funkcji, określając typ struktury jako typ zwracany:

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

Używanie struktur z funkcjami sprawia, że twój kod jest bardziej uporządkowany i czytelny. Zamiast przekazywać wiele pojedynczych parametrów, możesz pogrupować powiązane dane i przekazać je jako jedną, dobrze zdefiniowaną całość.

challenge icon

Wyzwanie

Łatwy

Otrzymasz cztery dane wejściowe: szerokość prostokąta (jako liczbę całkowitą), wysokość prostokąta (jako liczbę całkowitą), długość boku kwadratu (jako liczbę całkowitą) oraz numer wyboru (1 lub 2). Zdefiniuj strukturę Rectangle z dwoma polami: width: i32 i height: i32. Utwórz dwie funkcje: jedną, która przyjmuje Rectangle i oblicza jego pole, oraz drugą, która przyjmuje długość boku i zwraca Rectangle reprezentujący kwadrat. Na podstawie wybranego numeru oblicz i wypisz odpowiednie pole.

Wymagania:

  • Zdefiniuj strukturę Rectangle z polami: width: i32 i height: i32
  • Utwórz funkcję calculate_area, która przyjmuje Rectangle jako parametr i zwraca i32 (pole)
  • Utwórz funkcję create_square, która przyjmuje i32 (długość boku) jako parametr i zwraca Rectangle o równej szerokości i wysokości
  • Odczytaj pierwsze dane wejściowe i przekonwertuj je na i32, aby uzyskać szerokość prostokąta
  • Odczytaj drugie dane wejściowe i przekonwertuj je na i32, aby uzyskać wysokość prostokąta
  • Utwórz instancję Rectangle o tych wymiarach
  • Odczytaj trzecie dane wejściowe i przekonwertuj je na i32, aby uzyskać długość boku kwadratu
  • Odczytaj czwarte dane wejściowe i przekonwertuj je na i32, aby uzyskać numer wyboru (1 lub 2)
  • Jeśli wybór wynosi 1: oblicz i wypisz pole prostokąta
  • Jeśli wybór wynosi 2: utwórz kwadrat za pomocą create_square, a następnie oblicz i wypisz jego pole

Dane wejściowe:

  • Pierwsza linia: szerokość prostokąta jako liczba całkowita (np. 8)
  • Druga linia: wysokość prostokąta jako liczba całkowita (np. 5)
  • Trzecia linia: długość boku kwadratu jako liczba całkowita (np. 6)
  • Czwarta linia: wybór jako liczba całkowita, 1 lub 2 (np. 1)

Dane wyjściowe:

  • Jeśli wybór wynosi 1: Rectangle area: [area]
  • Jeśli wybór wynosi 2: Square area: [area]

Spróbuj swoich sił

use std::io;

// TODO: Zdefiniuj tutaj strukturę Rectangle


// TODO: Zdefiniuj tutaj funkcję calculate_area


// TODO: Zdefiniuj tutaj funkcję create_square


fn main() {
    // Wczytaj szerokość prostokąta
    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");
    
    // Wczytaj wysokość prostokąta
    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");
    
    // Wczytaj długość boku kwadratu
    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");
    
    // Wczytaj wybór
    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: Napisz swój kod poniżej
    // Utwórz instancję Rectangle, sprawdź wybór i oblicz odpowiednie pole
    
    
    // Wyświetl wynik w zależności od wyboru
    // Użyj: println!("Rectangle area: {}", area); lub println!("Square area: {}", area);
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online