Cicli annidati
Fa parte della sezione Fondamenti del percorso GO di Coddy. Lezione 49 di 109.
I cicli annidati sono cicli inseriti all'interno di un altro ciclo. Il ciclo interno viene eseguito completamente a ogni iterazione del ciclo esterno.
Creiamo una tabella di moltiplicazione per i numeri da 1 a 3 usando cicli annidati:
rows := 3
cols := 3
for i := 1; i <= rows; i++ {
for j := 1; j <= cols; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}Dopo aver eseguito questo codice, otteniamo una tabella di moltiplicazione in cui ogni riga rappresenta un valore della variabile del ciclo esterno (i) moltiplicato per tutti i valori della variabile del ciclo interno (j). L'output verrà visualizzato sullo schermo:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9 Vediamo come funziona passo dopo passo:
Per prima cosa, il ciclo esterno imposta i=1 e il ciclo interno viene eseguito completamente:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"Dopo che il ciclo interno termina, stampiamo una nuova riga con fmt.Println().
Poi il ciclo esterno imposta i=2 e il ciclo interno ricomincia, con j che riparte da 1:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"Infine, il ciclo esterno imposta i=3 e il ciclo interno viene eseguito un'ultima volta:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"Ogni ciclo ha il proprio contatore (i e j) e rows e cols non cambiano mai: indicano solo ai cicli quando fermarsi. Questo schema è molto utile per lavorare con tabelle di dati o creare strutture simili a griglie.
Sfida
PrincipianteIn questa sfida, ti eserciterai a usare cicli annidati per stampare un semplice motivo. Il ciclo esterno scorrerà le righe e quello interno scorrerà le colonne per creare una piccola griglia di caratteri.
Completa i cicli annidati per stampare una griglia 3x3 di asterischi (*). Ogni asterisco deve essere seguito da uno spazio, quindi ogni riga dovrebbe apparire così: * * * (con uno spazio finale). L'output previsto è:
* * * * * * * * *
Usa un nuovo contatore per ogni ciclo (ad esempio i per le righe e j per gli asterischi in una riga) e confrontalo con rows o columns. Non modificare rows e columns: ogni riga ha bisogno di columns di nuovo.
Provalo tu
package main
import "fmt"
func main() {
// Numero di righe e colonne nella nostra griglia
rows := 3
columns := 3
// TODO: Crea un ciclo annidato per stampare una griglia di asterischi (*)
// Il ciclo esterno deve scorrere le righe
// Il ciclo interno deve scorrere le colonne
for i := 0; i < rows; i++ {
// Aggiungi qui il ciclo interno per stampare gli asterischi in ogni colonna
// Questo stampa una nuova riga dopo ogni riga della griglia
fmt.Println()
}
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori di confronto e logici
Operatori di confronto - Parte 1Operatori di confronto - Parte 2Operatore AND logicoOperatore OR logicoOperatore NOT logicoNozioni di base sulla precedenza degli operatoriRiepilogo - Eseguire confronti7Flusso di controllo: cicli
Come funziona il ciclo `for`Ciclo `for` - baseCiclo `for` - solo condizioneLa parola chiave `break`La parola chiave `continue`Cicli annidatiRiepilogo - ripetere le azioni2Variabili e tipi di dati di base
Che cos'è una variabileInferenza del tipo con `:=`Numeri interi (int)Numeri in virgola mobileValori booleaniStringheValori zeroCostantiConvenzioni di denominazioneRiepilogo: variabili e tipi5Input/output di base
Output formattatoVerbi di formattazioneVisualizzazione dei tipiAcquisire input di base dall’utenteRiepilogo - Input e output8Funzioni
Capire le funzioniDichiarare una funzioneChiamare le funzioniParametri delle funzioniRestituire un singolo valoreRestituire più valoriValori restituiti con nomeFondamenti dell'ambito delle funzioniRiepilogo - Creare codice riutilizzabile3Operatori di base
Operatori aritmeticiOperatore di divisioneL'operatore moduloOperatore di assegnazioneOperatori di assegnazione compostaIncremento e decrementoRiepilogo - Calcoli6Flusso di controllo: condizioni
L'istruzione `if`La parola chiave `else`La parola chiave `else if`Ombreggiamento delle variabili in `if`Inizializzare le variabiliL'istruzione `switch``switch` con espressioni`switch` senza espressioneLa parola chiave `fallthrough`Riepilogo: prendere decisioni9Puntatori
Che cos’è un puntatore?Dichiarare variabili puntatoreL’operatore indirizzoDereferenziare i puntatoriUsare i puntatori nelle funzioniPuntatori nilRipasso - Capire i puntatori12Tipi compositi: mappe
Introduzione alle mappeDichiarare i letterali delle mappeCreare mappe con `make`Aggiungere e aggiornare coppie chiave-valoreAccedere ai valori delle mappeVerificare l'esistenza di una chiaveEliminare elementi dalle mappeLunghezza delle mappeIterare sulle mappeRiepilogo - Archiviazione chiave-valoreEsercitati da solo: Compilatore Go online