Menu
CoddyTech

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.

challenge icon

Sfida

Principiante

In 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()
	}
}
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 Fondamenti

Esercitati da solo: Compilatore Go online