Bucles anidados
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 49 de 109.
Bucles anidados son bucles colocados dentro de otro bucle. El bucle interno se ejecuta completamente por cada iteración del bucle externo.
Creemos una tabla de multiplicar para los números del 1 al 3 usando bucles anidados:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}Después de ejecutar este código, obtenemos una tabla de multiplicar donde cada fila representa un valor de la variable del bucle externo (i) multiplicado por todos los valores de la variable del bucle interno (j). La salida se mostrará en la pantalla:
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 Entendamos cómo funciona esto paso a paso:
Primero, el bucle externo establece i=1 y el bucle interno se ejecuta 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"Después de que el bucle interno termine, imprimimos una nueva línea con fmt.Println().
Luego, el bucle externo establece i=2 y el bucle interno se ejecuta de nuevo:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"Finalmente, el bucle externo establece i=3 y el bucle interno se ejecuta una última vez:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"Este patrón de bucles dentro de bucles es muy útil para trabajar con tablas de datos o para crear estructuras tipo cuadrícula.
Desafío
PrincipianteEn este desafío, practicarás el uso de bucles anidados para imprimir un patrón simple. El bucle externo iterará a través de las filas y el bucle interno iterará a través de las columnas para crear una pequeña cuadrícula de caracteres.
Completa los bucles anidados para imprimir una cuadrícula de 3x3 de asteriscos (*). Cada asterisco debe ir seguido de un espacio, por lo que cada fila debe verse como * * * (con un espacio al final). El resultado esperado es:
* * * * * * * * *
Hoja de referencia
Los bucles anidados son bucles colocados dentro de otro bucle. El bucle interno se ejecuta completamente por cada iteración del bucle externo.
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}El bucle externo controla las filas, mientras que el bucle interno controla las columnas. Por cada iteración del bucle externo, el bucle interno completa todas sus iteraciones antes de pasar a la siguiente iteración del bucle externo.
Pruébalo tú mismo
package main
import "fmt"
func main() {
// Número de filas y columnas en nuestra cuadrícula
rows := 3
columns := 3
// TODO: Crear un bucle anidado para imprimir una cuadrícula de asteriscos (*)
// El bucle externo debe iterar a través de las filas
// El bucle interno debe iterar a través de las columnas
for i := 0; i < rows; i++ {
// Agrega tu bucle interno aquí para imprimir asteriscos en cada columna
// Esto imprime una nueva línea después de cada fila
fmt.Println()
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisiones