Ciclos Anidados y Aplicaciones Avanzadas en PSeInt
Introducción
En segundo de bachillerato, profundizamos en técnicas de programación que nos permiten resolver problemas más complejos. Los ciclos anidados no son solo bucles dentro de bucles, son herramientas poderosas para trabajar con estructuras bidimensionales, optimizar algoritmos y crear patrones sofisticados.
1. Fundamentos Avanzados de Ciclos Anidados
Los ciclos anidados permiten trabajar con múltiples dimensiones. Mientras que un ciclo simple recorre una línea, los ciclos anidados pueden recorrer tablas, matrices o generar patrones complejos.
Estructura General:
Para variable_externa <- inicio Hasta fin Hacer
// Este nivel se ejecuta N veces
Para variable_interna <- inicio Hasta fin Hacer
// Este nivel se ejecuta N × M veces
// Instrucciones
FinPara
FinPara
Complejidad temporal: Si el ciclo externo se ejecuta N veces y el interno M veces, la complejidad es O(N × M).
2. Aplicaciones Avanzadas
A) Matrices y Arreglos Bidimensionales
Las matrices son estructuras fundamentales en programación. Podemos visualizarlas como tablas con filas y columnas.
Ejemplo: Llenado e impresión de una matriz
Algoritmo MatrizBasica
Definir matriz, filas, columnas, i, j Como Entero
filas <- 3
columnas <- 4
Dimension matriz[filas, columnas]
// Llenado de la matriz
Para i <- 0 Hasta filas-1 Hacer
Para j <- 0 Hasta columnas-1 Hacer
Escribir "Ingrese valor para posición [", i, ",", j, "]:"
Leer matriz[i,j]
FinPara
FinPara
// Impresión de la matriz
Escribir ""
Escribir "MATRIZ COMPLETA:"
Para i <- 0 Hasta filas-1 Hacer
Para j <- 0 Hasta columnas-1 Hacer
Escribir Sin Saltar matriz[i,j], " "
FinPara
Escribir "" // Salto de línea entre filas
FinPara
FinAlgoritmo
B) Operaciones con Matrices
Suma de matrices:
Algoritmo SumaMatrices
Definir matrizA, matrizB, resultado Como Entero
Definir n, i, j Como Entero
n <- 3
Dimension matrizA[n,n], matrizB[n,n], resultado[n,n]
// Llenado de matrices A y B
Escribir "MATRIZ A:"
Para i <- 0 Hasta n-1 Hacer
Para j <- 0 Hasta n-1 Hacer
Escribir "A[", i, ",", j, "]:"
Leer matrizA[i,j]
FinPara
FinPara
Escribir "MATRIZ B:"
Para i <- 0 Hasta n-1 Hacer
Para j <- 0 Hasta n-1 Hacer
Escribir "B[", i, ",", j, "]:"
Leer matrizB[i,j]
FinPara
FinPara
// Suma de matrices
Para i <- 0 Hasta n-1 Hacer
Para j <- 0 Hasta n-1 Hacer
resultado[i,j] <- matrizA[i,j] + matrizB[i,j]
FinPara
FinPara
// Mostrar resultado
Escribir "MATRIZ RESULTANTE:"
Para i <- 0 Hasta n-1 Hacer
Para j <- 0 Hasta n-1 Hacer
Escribir Sin Saltar resultado[i,j], " "
FinPara
Escribir ""
FinPara
FinAlgoritmo
C) Búsqueda en Matrices
Encontrar el elemento mayor de una matriz:
Algoritmo ElementoMayor
Definir matriz, filas, columnas, i, j, mayor Como Entero
filas <- 4
columnas <- 4
Dimension matriz[filas, columnas]
// Llenado
Para i <- 0 Hasta filas-1 Hacer
Para j <- 0 Hasta columnas-1 Hacer
matriz[i,j] <- Aleatorio(1, 100)
FinPara
FinPara
// Inicializar el mayor con el primer elemento
mayor <- matriz[0,0]
// Búsqueda del mayor
Para i <- 0 Hasta filas-1 Hacer
Para j <- 0 Hasta columnas-1 Hacer
Si matriz[i,j] > mayor Entonces
mayor <- matriz[i,j]
FinSi
FinPara
FinPara
Escribir "El elemento mayor es: ", mayor
FinAlgoritmo
D) Patrones y Figuras Geométricas
Los ciclos anidados son perfectos para crear patrones visuales:
Triángulo de asteriscos:
Algoritmo TrianguloAsteriscos
Definir i, j, altura Como Entero
Escribir "Altura del triángulo:"
Leer altura
Para i <- 1 Hasta altura Hacer
Para j <- 1 Hasta i Hacer
Escribir Sin Saltar "* "
FinPara
Escribir ""
FinPara
FinAlgoritmo
Salida para altura = 5:
*
* *
* * *
* * * *
* * * * *
E) Aplicación Práctica: Sistema de Calificaciones con Estadísticas
Algoritmo SistemaCalificacionesAvanzado
Definir numEstudiantes, numMaterias, i, j Como Entero
Definir calificaciones Como Real
Definir suma, promedio, promedioGeneral, sumaTotal Como Real
Definir mejorPromedio, peorPromedio Como Real
Definir aprobados, reprobados Como Entero
Escribir "Número de estudiantes:"
Leer numEstudiantes
Escribir "Número de materias:"
Leer numMaterias
Dimension calificaciones[numEstudiantes, numMaterias]
// Ingreso de calificaciones
Para i <- 0 Hasta numEstudiantes-1 Hacer
Escribir ""
Escribir "ESTUDIANTE ", i+1
Para j <- 0 Hasta numMaterias-1 Hacer
Escribir "Calificación materia ", j+1, ":"
Leer calificaciones[i,j]
FinPara
FinPara
// Cálculo de estadísticas
sumaTotal <- 0
aprobados <- 0
reprobados <- 0
mejorPromedio <- 0
peorPromedio <- 10
Escribir ""
Escribir "=== RESULTADOS ==="
Para i <- 0 Hasta numEstudiantes-1 Hacer
suma <- 0
Para j <- 0 Hasta numMaterias-1 Hacer
suma <- suma + calificaciones[i,j]
FinPara
promedio <- suma / numMaterias
sumaTotal <- sumaTotal + promedio
Escribir "Estudiante ", i+1, " - Promedio: ", promedio
Si promedio >= 7 Entonces
aprobados <- aprobados + 1
Sino
reprobados <- reprobados + 1
FinSi
Si promedio > mejorPromedio Entonces
mejorPromedio <- promedio
FinSi
Si promedio < peorPromedio Entonces
peorPromedio <- promedio
FinSi
FinPara
promedioGeneral <- sumaTotal / numEstudiantes
Escribir ""
Escribir "=== ESTADÍSTICAS GENERALES ==="
Escribir "Promedio general del curso: ", promedioGeneral
Escribir "Mejor promedio: ", mejorPromedio
Escribir "Peor promedio: ", peorPromedio
Escribir "Estudiantes aprobados: ", aprobados
Escribir "Estudiantes reprobados: ", reprobados
FinAlgoritmo
3. Optimización y Buenas Prácticas
Evitar Ciclos Innecesarios
Malo:
Para i <- 0 Hasta n-1 Hacer
Para j <- 0 Hasta n-1 Hacer
Si i = j Entonces
// Solo se ejecuta cuando i = j
FinSi
FinPara
FinPara
Mejor:
Para i <- 0 Hasta n-1 Hacer
// Procesar directamente cuando i = j
// Sin necesidad del segundo ciclo
FinPara
Romper Ciclos con Banderas
Algoritmo BusquedaConBandera
Definir encontrado Como Logico
Definir i, j, valorBuscado Como Entero
encontrado <- Falso
Para i <- 0 Hasta n-1 Hacer
Si encontrado Entonces
// Salir del ciclo externo
Sino
Para j <- 0 Hasta m-1 Hacer
Si matriz[i,j] = valorBuscado Entonces
encontrado <- Verdadero
Escribir "Encontrado en [", i, ",", j, "]"
FinSi
FinPara
FinSi
FinPara
FinAlgoritmo
4. Casos de Uso Reales
- Juegos de tablero (ajedrez, tres en raya)
- Procesamiento de imágenes (píxeles en filas y columnas)
- Horarios escolares (días × horas)
- Análisis de ventas (productos × meses)
- Operaciones matemáticas (multiplicación de matrices)