Ciclo annidato
Fa parte della sezione Fondamenti del percorso Swift di Coddy. Lezione 49 di 86.
Un ciclo annidato è semplicemente un ciclo all'interno di un altro ciclo. Il ciclo interno completa tutte le sue iterazioni per ogni singola iterazione del ciclo esterno.
let rows = 3
let cols = 2
for row in 1...rows {
for col in 1...cols {
print("Row \(row), Col \(col)")
}
}
// Output:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2Per ogni valore di row, il ciclo interno ricomincia e scorre tutti i valori di col, da 1 a cols. Quindi, con rows = 3 e cols = 2, il codice all'interno viene eseguito 6 volte in totale (3 × 2). rows e cols non cambiano mai: indicano solo ai cicli quando fermarsi.
I cicli annidati sono comunemente usati per lavorare con strutture simili a griglie o per generare motivi.
Ecco un esempio che stampa un semplice rettangolo di asterischi:
for row in 1...2 {
for col in 1...4 {
print("*", terminator: "")
}
print("") // Passa alla riga successiva
}
// Output:
// ****
// ****Il terminator: "" impedisce a print di aggiungere una nuova riga, così gli asterischi appaiono sulla stessa riga. Dopo che il ciclo interno termina, print("") passa alla riga successiva.
Sfida
FacileLeggi due numeri interi dall'input: rows e cols. Usa cicli annidati per stampare una griglia di numeri in cui ogni cella mostra il prodotto del numero della sua riga per quello della sua colonna.
Riceverai i seguenti input:
- Prima riga: numero di righe (ad es.
"3") - Seconda riga: numero di colonne (ad es.
"4")
Requisiti:
- Usa un ciclo esterno per le righe (da 1 a
rows) - Usa un ciclo interno per le colonne (da 1 a
cols) - Stampa il prodotto dei numeri della riga e della colonna correnti
- Separa con uno spazio i valori sulla stessa riga
- Ogni riga deve essere su una riga distinta
Suggerimento: Usa terminator: " " per mantenere i valori sulla stessa riga, poi usa print("") dopo il ciclo interno per passare alla riga successiva.
Ad esempio, se rows è 3 e cols è 4, l'output dovrebbe essere:
1 2 3 4
2 4 6 8
3 6 9 12 Usa un nuovo contatore per ogni ciclo (ad esempio row per le righe e col per i numeri di una riga) e confrontalo con rows o cols. Non modificare rows e cols: ogni riga ha bisogno di cols di nuovo.
Provalo tu
let rows = Int(readLine()!)!
let cols = Int(readLine()!)!
// TODO: Scrivi il tuo codice qui sotto
// Usa cicli annidati per stampare una tabella di moltiplicazione
// Ciclo esterno: itera sulle righe (1 a rows)
// Ciclo interno: itera sulle colonne (1 a cols)
// Stampa il prodotto di row * column
// Usa print(..., terminator: " ") per mantenere i valori sulla stessa riga
// Usa print("") dopo il ciclo interno per passare alla riga successivaQuesta 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 moduloAssegnazione compostaRiepilogo - Matematica sempliceOperatori di confronto7I/O di base
Funzione printInterpolazione di stringheInput con ReadLineConversione di tipoRipasso - Fino a 120Ripasso - Vero o falso10Funzioni
Dichiarare una funzioneParametri e argomentiValori restituitiEtichette degli argomentiRiepilogo - Funzione SigmaRiepilogo - Funzione di validazioneValori predefiniti13Iterare sulle sequenze
Iterare sugli elementiIl metodo enumerateIterare sulle stringhe P1Iterare sulle stringhe P22Variabili
Let vs VarAnnotazioni di tipoNumeriStringaBooleanoConvenzioni di denominazioneRiepilogo - Inizializzare le variabili5Operatori Parte 2
Operatori logici Parte 1Operatori logici Parte 2Riepilogo - Logica sempliceOperatori logici Parte 3Operatore ternario8Calcolatore per dividere il conto
Messaggio di benvenutoAcquisire i dati11FizzBuzz con una variante
Panoramica del giocoLa funzione FizzBuzz3Valori opzionali
Cosa sono i valori opzionaliEstrazione del valore con if letGuard letOperatore di coalescenza nilRiepilogo - Estrazione sicura del valore6Decisioni
Istruzione ifIf - ElseRipasso - Calcolatrice sempliceIstruzione switchSwitch con intervalli9Cicli
Ciclo for-inCiclo whileCiclo repeat-whileBreakContinueRipasso - FattorialeIntervalli nei cicliCiclo annidatoRipasso - Input dinamicoEsercitati da solo: Playground Swift