Salta al contenido principal
15 / 103
Requisitos de finalización
Recibir una calificación
Abrió: lunes, 23 de marzo de 2026, 00:00
Cierra: domingo, 5 de abril de 2026, 23:59

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

  1. Juegos de tablero (ajedrez, tres en raya)
  2. Procesamiento de imágenes (píxeles en filas y columnas)
  3. Horarios escolares (días × horas)
  4. Análisis de ventas (productos × meses)
  5. Operaciones matemáticas (multiplicación de matrices)
Ha alcanzado el 0% de esta lección
0%