Boucles imbriquées
Fait partie de la section Fondamentaux du Journey GO de Coddy. Leçon 49 sur 109.
Les boucles imbriquées sont des boucles placées à l’intérieur d’une autre boucle. La boucle interne s’exécute entièrement à chaque itération de la boucle externe.
Créons une table de multiplication pour les nombres de 1 à 3 à l’aide de boucles imbriquées :
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()
}Après avoir exécuté ce code, nous obtenons une table de multiplication où chaque ligne représente une valeur de la variable de la boucle externe (i) multipliée par toutes les valeurs de la variable de la boucle interne (j). Le résultat s’affichera à l’écran :
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 Comprenons comment cela fonctionne étape par étape :
Tout d’abord, la boucle externe définit i=1 et la boucle interne s’exécute complètement :
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"Une fois la boucle interne terminée, nous affichons une nouvelle ligne avec fmt.Println().
Ensuite, la boucle externe définit i=2 et la boucle interne recommence, avec j qui repart de 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"Enfin, la boucle externe définit i=3 et la boucle interne s’exécute une dernière fois :
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"Chaque boucle a son propre compteur (i et j), et rows et cols ne changent jamais : ils indiquent seulement aux boucles quand s’arrêter. Ce modèle est très utile pour travailler avec des tableaux de données ou créer des structures en grille.
Défi
DébutantDans ce défi, tu vas t’entraîner à utiliser des boucles imbriquées pour afficher un motif simple. La boucle externe parcourra les lignes, et la boucle interne parcourra les colonnes pour créer une petite grille de caractères.
Complète les boucles imbriquées pour afficher une grille de 3x3 astérisques (*). Chaque astérisque doit être suivi d’une espace, chaque ligne doit donc ressembler à * * * (avec une espace finale). Le résultat attendu est :
* * * * * * * * *
Utilise un nouveau compteur pour chaque boucle (par exemple i pour les lignes et j pour les astérisques d’une ligne) et compare-le à rows ou à columns. Ne modifie pas rows et columns eux-mêmes : chaque ligne a besoin de columns à nouveau.
Essayez vous-même
package main
import "fmt"
func main() {
// Nombre de lignes et de colonnes dans notre grille
rows := 3
columns := 3
// TODO: Créer une boucle imbriquée pour afficher une grille d’astérisques (*)
// La boucle externe doit parcourir les lignes
// La boucle interne doit parcourir les colonnes
for i := 0; i < rows; i++ {
// Ajoutez ici votre boucle interne pour afficher des astérisques dans chaque colonne
// Ceci affiche un saut de ligne après chaque ligne
fmt.Println()
}
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs de comparaison et logiques
Opérateurs de comparaison - Partie 1Opérateurs de comparaison - Partie 2Opérateur logique ANDOpérateur logique OROpérateur logique NOTBases de la priorité des opérateursRécapitulatif - Effectuer des comparaisons7Structures de contrôle : Les boucles
Explication de la boucle `for`Boucle For - Les basesBoucle For - Condition uniquementLe mot-clé `break`Le mot-clé `continue`Boucles imbriquéesRécapitulatif - Répéter des actions2Variables et types de données de base
Qu'est-ce qu'une variableInférence de type avec `:=` Entiers (int)Nombres à virgule flottanteBooléensChaînes de caractères (Strings)Valeurs zéroConstantesConventions de nommageRécapitulatif - Variables et types5Entrées/Sorties de base
Sortie formatéeVerbes de formatageAffichage des typesSaisie utilisateur de baseRécapitulatif - Entrées et Sorties8Fonctions
Comprendre les fonctionsDéclarer une fonctionAppeler des fonctionsParamètres de fonctionRetourner une valeur uniqueRetourner plusieurs valeursValeurs de retour nomméesBases de la portée des fonctionsRécapitulatif - Créer du code réutilisable11Types composites : Slices
Introduction aux SlicesDéclaration de littéraux de SlicesCréation de Slices avec `make`Longueur vs Capacité des SlicesAccès aux éléments d'un SliceAjout d'élémentsDécoupage de Slices/Tableaux existantsItération sur les SlicesCopie de SlicesRécapitulatif - Listes dynamiques3Opérateurs de base
Opérateurs arithmétiquesOpérateur de divisionL'opérateur moduloOpérateur d'affectationOpérateurs d'affectation augmentéeIncrémentation et décrémentationRécapitulatif - Calculs6Structure de contrôle : Les conditionnelles
L'instruction `if`Le mot-clé `else`Le mot-clé `else if`Masquage de variable dans `if`Initialisation des variablesL'instruction `switch``switch` avec expressions`switch` sans expressionLe mot-clé `fallthrough`Récapitulatif - Prendre des décisions9Pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de variables pointeursL'opérateur d'adresseDéréférencement de pointeursUtiliser des pointeurs dans les fonctionsPointeurs NilRécapitulatif - Comprendre les pointeurs12Types composites : Maps
Introduction aux MapsDéclaration de littéraux de MapCréation de Maps avec `make`Ajout et mise à jour de paires clé-valeurAccès aux valeurs d'une MapVérification de l'existence d'une cléSuppression d'entrées de MapTaille d'une MapItération sur les MapsRécapitulatif - Stockage clé-valeurEntraînez-vous par vous-même : Compilateur Go en ligne