Menu
Coddy logo textTech

Struct come parametri di funzione

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 24 di 66.

Ora che sai come creare e modificare le struct, scopriamo come usarle con le funzioni. Proprio come qualsiasi altro tipo di dato in Rust, puoi passare istanze di struct alle funzioni e restituirle dalle funzioni.

Per passare una struct a una funzione, ti basta includerla come parametro nella definizione della funzione:

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

Questa funzione accetta una struct Rectangle come parametro e restituisce un i32. All'interno della funzione, puoi accedere ai campi della struct usando la notazione con il punto, proprio come faresti in qualsiasi altro contesto.

Puoi anche restituire strutture dalle funzioni specificando il tipo della struttura come tipo restituito:

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

Usare le struct con le funzioni rende il tuo codice più organizzato e significativo. Invece di passare più parametri singoli, puoi raggruppare i dati correlati e passarli come un'unica unità ben definita.

challenge icon

Sfida

Facile

Riceverai quattro input: la larghezza di un rettangolo (come intero), l'altezza di un rettangolo (come intero), la lunghezza del lato di un quadrato (come intero) e un numero di scelta (1 o 2). Definisci una struct Rectangle con due campi: width: i32 e height: i32. Crea due funzioni: una che accetta un Rectangle e ne calcola l'area, e un'altra che accetta la lunghezza di un lato e restituisce un Rectangle che rappresenta un quadrato. In base all'input della scelta, calcola e stampa l'area appropriata.

Requisiti:

  • Definisci una struct Rectangle con i campi: width: i32 e height: i32
  • Crea una funzione calculate_area che accetta un Rectangle come parametro e restituisce un i32 (l'area)
  • Crea una funzione create_square che accetta un i32 (la lunghezza del lato) come parametro e restituisce un Rectangle con larghezza e altezza uguali
  • Leggi il primo input e convertilo in i32 per la larghezza del rettangolo
  • Leggi il secondo input e convertilo in i32 per l'altezza del rettangolo
  • Crea un'istanza di Rectangle con queste dimensioni
  • Leggi il terzo input e convertilo in i32 per la lunghezza del lato del quadrato
  • Leggi il quarto input e convertilo in i32 per la scelta (1 o 2)
  • Se la scelta è 1: calcola e stampa l'area del rettangolo
  • Se la scelta è 2: crea un quadrato usando create_square, poi calcolane e stampane l'area

Input:

  • Prima riga: larghezza del rettangolo come intero (ad es., 8)
  • Seconda riga: altezza del rettangolo come intero (ad es., 5)
  • Terza riga: lunghezza del lato del quadrato come intero (ad es., 6)
  • Quarta riga: scelta come intero, 1 o 2 (ad es., 1)

Output:

  • Se la scelta è 1: Rectangle area: [area]
  • Se la scelta è 2: Square area: [area]

Provalo tu

use std::io;

// TODO: Definisci qui la struct Rectangle


// TODO: Definisci qui la funzione calculate_area


// TODO: Definisci qui la funzione create_square


fn main() {
    // Leggi la larghezza del rettangolo
    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");
    
    // Leggi l'altezza del rettangolo
    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");
    
    // Leggi la lunghezza del lato del quadrato
    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");
    
    // Leggi la scelta
    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: Scrivi il tuo codice qui sotto
    // Crea un'istanza di Rectangle, verifica la scelta e calcola l'area appropriata
    
    
    // Stampa il risultato in base alla scelta
    // Usa: println!("Rectangle area: {}", area); oppure println!("Square area: {}", area);
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online