Menu
Coddy logo textTech

Podsumowanie — typ wyliczeniowy Shape

Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 18 z 61.

challenge icon

Wyzwanie

Łatwy

Zbudujmy kalkulator geometrii, który używa typu wyliczeniowego do reprezentowania różnych kształtów, z których każdy przechowuje własne wymiary. Typ wyliczeniowy Shape pokaże, jak jeden typ może przechowywać różne struktury danych i zapewniać wspólne zachowanie za pomocą metod.

Utworzysz dwa pliki, aby uporządkować kod:

  • shape.rs: Zdefiniuj publiczny typ wyliczeniowy Shape z dwoma wariantami:
    • Circle: przechowuje pojedynczą wartość f64 reprezentującą promień (składnia krotkowa)
    • Rectangle: przechowuje nazwane pola: width (f64) i height (f64)
    Zaimplementuj metodę area, która używa dopasowywania wzorców, aby obliczyć odpowiednie pole na podstawie wariantu. Dla okręgów użyj 3.14159 jako π.
  • main.rs: Dołącz moduł kształtów, utwórz po jednej instancji każdego wariantu kształtu, używając podanych danych wejściowych, i wypisz pole każdego kształtu.

Metoda area powinna zwracać wartość typu f64. Podczas dopasowywania rozpakuj każdy wariant, aby wyodrębnić jego wymiary, i zastosuj odpowiedni wzór:

  • Pole okręgu: π × radius²
  • Pole prostokąta: width × height

Wynik powinien wyświetlać pole każdego kształtu w osobnym wierszu, z dokładnością do jednego miejsca po przecinku:

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

Na przykład dla okręgu o promieniu 5.0 i prostokąta o szerokości 4.0 oraz wysokości 6.0 wynik będzie następujący:

Circle area: 78.5
Rectangle area: 24.0

Otrzymasz trzy dane wejściowe: promień okręgu, szerokość prostokąta i wysokość prostokąta.

Spróbuj swoich sił

mod shape;

use shape::Shape;

fn main() {
    // Wczytaj dane wejściowe
    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: Utwórz figurę Circle, używając promienia
    
    // TODO: Utwórz figurę Rectangle, używając szerokości i wysokości
    
    // TODO: Wypisz pole każdej figury z jednym miejscem po przecinku
    // Format: "Circle area: {area}" i "Rectangle area: {area}"
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Rust online