Ciclo annidato
Fa parte della sezione Fondamenti del percorso Rust di Coddy. Lezione 41 di 75.
Un ciclo annidato è semplicemente un ciclo all'interno di un altro ciclo. Il ciclo interno completerà tutte le sue iterazioni per ogni singola iterazione del ciclo esterno. Una buona analogia è un orologio: per ogni ora (ciclo esterno), la lancetta dei minuti (ciclo interno) deve completare il suo ciclo completo di 60 minuti.
Esempio di ciclo annidato:
let rows = 2;
let cols = 2;
for x in 0..rows {
for y in 0..cols {
println!("{} {}", x, y);
}
}
// Questo produrrà in output:
// 0 0
// 0 1
// 1 0
// 1 1Il ciclo esterno (x) viene eseguito rows volte e, per ciascuna di queste, il ciclo interno (y) viene eseguito cols volte. Ogni ciclo ha il proprio contatore: y riparte da 0 ogni volta che viene eseguito il ciclo esterno, mentre rows e cols rimangono invariati e indicano solo ai cicli quando fermarsi.
Sfida
PrincipianteScrivi un programma che stampa un rettangolo di asterischi (*) con una larghezza e un'altezza date.
Input: due numeri interi: width e height (il codice iniziale li legge già).
Per esempio:
Se width = 5 e height = 3, l'output dovrebbe essere:
*****
*****
*****Se width = 4 e height = 6, l'output dovrebbe essere:
****
****
****
****
****
****Usa un nuovo contatore per ogni ciclo (per esempio i per le righe e j per gli asterischi in una riga) e confrontalo con height o width. Non modificare height e width: ogni riga ha bisogno di nuovo di width.
Provalo tu
use std::io;
fn main() {
let mut width_input = String::new();
let mut height_input = String::new();
io::stdin().read_line(&mut width_input).unwrap();
io::stdin().read_line(&mut height_input).unwrap();
let width: i32 = width_input.trim().parse().unwrap();
let height: i32 = height_input.trim().parse().unwrap();
// Scrivi il tuo codice qui sotto
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori Parte 1
Operatori aritmeticiOperatore moduloAbbreviazioni aritmeticheOperatori di confrontoConfronto tra stringhe7Input/output di base
Stampare sulla consoleLeggere l'input dell'utenteRiepilogo - Fino a 120Riepilogo - Vero o falso5Operatori Parte 2
Operatori logici Parte 1Operatori logici Parte 2Ripasso - Logica sempliceOperatori logici Parte 311Funzioni
Dichiarare le funzioniParametri e argomentiValori restituitiValori restituiti multipliRiepilogo - funzione SigmaRiepilogo - funzione di validazione14Iterare sugli array
Guida ai rangeCiclo for avanzatoPrestito nel cicloOperazioni comuni sugli array3Variabili Parte 2
Dichiarazione del tipoConvenzioni di denominazioneInferenza del tipoRipasso - Inizializzare le variabiliConversione di tipo9Cicli
Ciclo for su sequenzeCiclo whileBreakContinueCiclo annidatoEtichette dei cicliCiclo infinitoRiepilogo - Input dinamico12Fondamenti degli array
Dichiarare gli arrayArray come parametroAccedere agli elementiModificare gli arrayRiepilogo - Stampare un array in modo leggibile15Operazioni sulle stringhe
Metodi delle stringheMacro format!Conversione delle stringheRipasso - FormattazioneEsercitati da solo: Compilatore Rust online