Menu
Coddy logo textTech

Riepilogo - enumerazione Shape

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 18 di 61.

challenge icon

Sfida

Facile

Costruiamo un calcolatore geometrico che usa un enum per rappresentare diverse forme, ognuna delle quali memorizza le proprie dimensioni. Il tuo enum Shape mostrerà come un singolo tipo possa contenere strutture di dati diverse e fornire un comportamento uniforme tramite i metodi.

Creerai due file per organizzare il codice:

  • shape.rs: definisci un enum pubblico Shape con due varianti:
    • Circle: contiene un singolo f64 che rappresenta il raggio (sintassi a tupla)
    • Rectangle: contiene campi con nome: width (f64) e height (f64)
    Implementa un metodo area che usa il pattern matching per calcolare l’area corretta in base alla variante. Per i cerchi, usa 3.14159 come π.
  • main.rs: importa il modulo delle forme, crea un’istanza di ciascuna variante della forma usando gli input forniti e stampa l’area di ciascuna forma.

Il tuo metodo area dovrebbe restituire un f64. Durante il matching, destruttura ciascuna variante per estrarne le dimensioni e applicare la formula appropriata:

  • Area del cerchio: π × radius²
  • Area del rettangolo: width × height

L’output dovrebbe mostrare l’area di ciascuna forma su una riga a sé, con esattamente una cifra decimale:

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

Per esempio, con un raggio del cerchio di 5.0 e un rettangolo con larghezza 4.0 e altezza 6.0, l’output sarebbe:

Circle area: 78.5
Rectangle area: 24.0

Riceverai tre input: il raggio del cerchio, la larghezza del rettangolo e l’altezza del rettangolo.

Provalo tu

mod shape;

use shape::Shape;

fn main() {
    // Leggi gli input
    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: Crea una forma Circle usando radius
    
    // TODO: Crea una forma Rectangle usando width e height
    
    // TODO: Stampa l'area di ogni forma con una cifra decimale
    // Formato: "Circle area: {area}" e "Rectangle area: {area}"
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online