Bucle anidado
Parte de la sección Fundamentos del Journey de Swift de Coddy — lección 49 de 86.
Un bucle anidado es simplemente un bucle dentro de otro bucle. El bucle interno completa todas sus iteraciones por cada iteración del bucle externo.
for row in 1...3 {
for col in 1...2 {
print("Row \(row), Col \(col)")
}
}
// Salida:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2Para cada valor de row, el bucle interno se ejecuta completamente a través de todos los valores de col. Así que con 3 iteraciones externas y 2 iteraciones internas, el código de adentro se ejecuta 6 veces en total (3 × 2).
Los bucles anidados se utilizan comúnmente para trabajar con estructuras tipo cuadrícula o para generar patrones.
Aquí tienes un ejemplo que imprime un rectángulo simple de asteriscos:
for row in 1...2 {
for col in 1...4 {
print("*", terminator: "")
}
print("") // Mover a la siguiente línea
}
// Salida:
// ****
// ****El terminator: "" evita que print agregue un salto de línea, por lo que los asteriscos aparecen en la misma fila. Después de que el bucle interno termina, print("") pasa a la siguiente línea.
Desafío
FácilLee dos números enteros de la entrada: rows y cols. Usa bucles anidados para imprimir una cuadrícula de números donde cada celda muestre el producto de su número de fila y su número de columna.
Recibirás las siguientes entradas:
- Primera línea: número de filas (por ejemplo,
"3") - Segunda línea: número de columnas (por ejemplo,
"4")
Requisitos:
- Usa un bucle externo para las filas (de 1 a
rows) - Usa un bucle interno para las columnas (de 1 a
cols) - Imprime el producto de los números de la fila y columna actuales
- Separa los valores en la misma fila con un espacio
- Cada fila debe estar en su propia línea
Sugerencia: Usa terminator: " " para mantener los valores en la misma línea, luego usa print("") después del bucle interno para pasar a la siguiente línea.
Por ejemplo, si rows es 3 and cols es 4, la salida debería ser:
1 2 3 4
2 4 6 8
3 6 9 12 Hoja de referencia
Un bucle anidado es un bucle dentro de otro bucle. El bucle interno completa todas sus iteraciones por cada iteración individual del bucle externo.
for row in 1...3 {
for col in 1...2 {
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 2Con 3 iteraciones externas y 2 iteraciones internas, el código se ejecuta 6 veces en total (3 × 2).
Los bucles anidados son útiles para estructuras en forma de cuadrícula y patrones:
for row in 1...2 {
for col in 1...4 {
print("*", terminator: "")
}
print("") // Mover a la siguiente línea
}
// Output:
// ****
// ****Usa terminator: "" para evitar que print añada un salto de línea, manteniendo la salida en la misma línea. Usa print("") después del bucle interno para pasar a la siguiente línea.
Pruébalo tú mismo
let rows = Int(readLine()!)!
let cols = Int(readLine()!)!
// TODO: Escribe tu código a continuación
// Usa bucles anidados para imprimir una cuadrícula de multiplicación
// Bucle externo: itera a través de las filas (1 a rows)
// Bucle interno: itera a través de las columnas (1 a cols)
// Imprime el producto de row * column
// Usa print(..., terminator: " ") para mantener los valores en la misma línea
// Usa print("") después del bucle interno para pasar a la siguiente líneaEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 1
Operadores aritméticosOperador de móduloAsignación compuestaResumen - Matemáticas simplesOperadores de comparación7E/S Básica
Función PrintInterpolación de StringsEntrada ReadLineConversión de TiposRepaso - Hasta 120Repaso - Verdadero o Falso10Funciones
Declarar una funciónParámetros y argumentosValores de retornoEtiquetas de argumentosResumen - Función SigmaResumen - Función de validaciónValores por defecto13Iterar sobre secuencias
Iterar sobre elementosEl método enumerateIterar sobre cadenas P1Iterar sobre cadenas P22Variables
Let vs VarAnotaciones de tiposNúmerosStringsBooleanosConvenciones de nomenclaturaResumen - Inicializar variables5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 3Operador ternario8Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada de datos11FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz3Opcionales
Qué son los opcionalesDesempaquetado con If LetGuard LetOperador de coalescencia nulaResumen - Desempaquetado seguro6Toma de decisiones
Sentencia IfIf - ElseRepaso - Calculadora simpleSentencia SwitchSwitch con rangos9Bucles
Bucle For-InBucle WhileBucle Repeat-WhileBreakContinueRepaso - FactorialRangos en buclesBucle anidadoRepaso - Entrada dinámica