Curso de Lógica Algorítmica: Nivel 3

Estructuras Cíclicas en Programación: Dominando Bucles, Ciclos y Loops

En el mundo del desarrollo de software, las Estructuras Cíclicas o Repetitivas son el pilar de la eficiencia. Aprenderemos a dominar los bucles, ciclos y loops, que se ejecutan mediante las acciones fundamentales PARA – MIENTRAS (FOR – WHILE).

¿Qué son las Estructuras Cíclicas?

En este artículo veremos las estructuras cíclicas, que mediante condiciones permiten repetir la ejecución de un conjunto de acciones de forma automatizada.

Esto es algo que no se ve tan claro y parece difícil pero se usa ¡muchísimo en la ingeniería de software! Cuando veamos ejemplos lo vas a entender y te vas a dar cuenta de su importancia para escribir código limpio y eficiente.

Lógica y Diagramas de Estructuras Cíclicas

La sintaxis lógica se escribe de la siguiente manera para garantizar un control de flujo correcto:

Arquitectura básica de un ciclo repetitivo.

Arquitectura lógica de algoritmos iterativos

Tenemos un bloque con una instrucción iterativa (loop, bucle, ciclo) que tiene una condición lógica que determina la ejecución:

Evaluación de la condición de entrada.

Validación de parámetros en bucles de programación

Si se cumple la condición se ingresa al bloque y se ejecutan todas las instrucciones que están en el bloque. Cuando se ejecuta la última instrucción del bloque, el procesador vuelve a evaluar la condición, y si se cumple, se vuelve a repetir el ciclo.

Se sale del bucle cuando no se cumple la condición, en ese caso se sigue con la línea que está por debajo del bloque, liberando el flujo del programa.

Ruptura del ciclo y salida del flujo.

Salida de flujo en estructuras repetitivas

¿Y para qué sirve repetir instrucciones? La clave de la automatización

Vamos a suponer que tenemos un programa que nos pide imprimir los números del 1 al 3. En el desarrollo tradicional, podríamos escribir cada línea manualmente:

Código ineficiente sin bucles

Con 3 lineas de impresión lo resolvemos, el texto “número” concatenado (sumado como palabra) al número (1,2,3).

¿Si piden agregar 4 y 5? Agregamos la impresión de número 4 y número 5 manualmente.

Redundancia de código manual

Pero si piden imprimir los primeros 100 o 10.000, ¡no vamos a escribirlo 100 veces! Para situaciones repetitivas y procesamiento de datos masivos tenemos los ciclos. Vamos a ver dos tipos de estructuras cíclicas de alto rendimiento: PARA (FOR) y WHILE (MIENTRAS).

El Ciclo PARA (FOR) en Detalle

El PARA (FOR) itera sobre una secuencia definida, ideal para cuando sabemos de antemano cuántas repeticiones tenemos que hacer.

Sintaxis del ciclo FOR

Este ciclo va iterar desde el valorInicial al valorFinal, ejecutando las instrucciones A, B y C en cada paso. A la variableContador le va a sumar uno en cada iteración automáticamente. Una vez que supera el valorFinal, sale del ciclo.

Si tenemos que imprimir del 1 al 100 ¿cómo hacemos? el primer número imprimir es el 1 y el último el 100, el ciclo tiene que recorrer todos esos números de forma secuencial.

Así que definimos nuestros parámetros:

  • valor inicial = 1
  • valor final = 100

Entonces, la lógica del algoritmo queda:

Implementación optimizada con FOR

Para número 1 a 100 imprimo número fin del ciclo. ¡En solo tres líneas de código profesional resolvimos el problema!

El Ciclo MIENTRAS (WHILE): Control por Condiciones de Estado

Por otro lado tenemos otra estructura cíclica muy potente, el MIENTRAS (WHILE) que ejecuta mientras se cumpla una condición lógica de estado.

Lógica del ciclo WHILE

Se evalúa la condición, si es verdadera se ingresa al bloque y se ejecutan las intrucciones A, B y C. Luego de ejecutar la instruccionC, se vuelve a evaluar la condición, si es verdadera vuelve a ingresar al bloque, y se repite hasta que la condición sea falsa, en ese caso continúa con la siguiente línea de código.

Diagrama de flujo ciclo Mientras

Importante para Programadores: Dentro del bloque debo asegurarme de cambiar los parámetros de la condición, para que en algún momento salga del ciclo.

Notemos algo, puede que el ciclo nunca se ejecute, si la primera vez que evalúa la condición es falsa, nunca ingresa al bloque.

Por ejemplo para el caso de imprimir los números del 1 al 100, la condición podría ser que el número sea menor o igual a 100.

Ahora ¿numero donde arranca? hay que inicializarlo, debemos asignarle un valor antes de entrar al ciclo. Por ejemplo podemos usar una variable de tipo entero número que inicializamos en 1.

En el MIENTRAS no hay una variable que se incremente automáticamente, como en el PARA, así que debemos incrementarla manualmente dentro del ciclo antes de volver a evaluar la condición.

La instrucción numero = numero + 1 es la que va a permitir salir del ciclo (de lo contrario quedamos en un ciclo infinito o bucle infinito, no termina nunca). A esta variable también se la conoce técnicamente como contador, porque va contando los pasos del ciclo.

Incremento de contador en Java y Python

Cuando numero valga 100, incrementamos numero, y va a valer 101, así que al volver a evaluar no se cumple la condición y sale del ciclo de forma segura.

Algo más: en algunos lenguajes de programación modernos el PARA (FOR) y el MIENTRAS (WHILE) se escriben de una manera similar, ambos basados en una condición, pero ya los vamos a ver en esos casos particulares de sintaxis avanzada.

Taller de Práctica: Ejercicio 1 (Conteo de Datos)

Análisis de datos con bucles

Vamos a tener 20 personas, un número fijo, que en programación puede definirse como una constante.

Para cada uno de estos 20, debemos pedir la edad; entonces una variable va a ser la edad (un número entero).

Para cargar las 20 edades podemos usar un ciclo eficiente, así que también vamos a necesitar una variable contador. Además, vamos a tener que retornar cuántos son mayores de 25 años, o sea la cantidad de mayores; vamos a tener que ir contándolos, así que de acá sale otra variable entera que podemos llamar cantidadDeMayores. La vamos a ir incrementando en 1 cada vez que se encuentre un perfil mayor de 25 años.

Algoritmo de filtrado de datos
  • Declaramos la constante PERSONAS que vale 20, y las variables edad, cantidadDeMayores y contador.
  • Inicializamos la variable cantidadDeMayores: al empezar hay cero mayores, la inicializamos en cero.
  • Armamos un ciclo PARA que vaya de 1 a PERSONAS, gestionando las 20 edades.
  • Para cada una de esas edades pedimos al usuario que “Ingresé la edad de la persona x” y leemos la edad de esa persona x.
  • Aplicamos un bloque condicional: si la edad es mayor a 25 años, sumamos 1 a la cantidadDeMayores, sino continuamos.
  • Este ciclo se va a repetir 20 veces y al finalizar muestra el resultado con un mensaje agradable y profesional al usuario.

Taller de Práctica: Ejercicio 2 (Validación de Entradas)

Lógica de validación de caracteres

El algoritmo va a leer caracteres hasta que el carácter ingresado sea una vocal. Esto indica que vamos a necesitar una variable, podemos llamarla letra de tipo caracter (char).

Vamos a tener que repetir la lectura en caso de que la variable no sea una vocal. No sabemos cuántas veces se repite, se basa en una condición externa, por lo que vamos a usar un ciclo mientras (While) con la condición de letra distinto de vocal.

También vamos a necesitar un contador, que va a realizar el registro dentro del ciclo.

Algo a tener en cuenta para la experiencia de usuario (UX): la primera letra la tengo que leer sí o sí, por lo que la vamos a leer fuera del ciclo. Después ya si vamos a tener que leer dentro del ciclo, para ver si esa letra cumple la condición o no.

Diagrama de flujo con entrada de datos
  • Variables: letra de tipo caracter, contador entero.
  • Cargamos el contador en cero, porque todavía no ingresó ninguna letra y leemos la primera entrada.
  • Iniciamos el ciclo: si se cumple la condición, o sea si letra no es vocal (no es ni “a”, ni “e”, ni “i”, ni “o”, ni “u”) incrementamos el contador y volvemos a leer letra.
  • Esta letra ingresada es la que vuelve a evaluar el ciclo, y si no es vocal va a volver a incrementar el contador y repetir la secuencia. Si es vocal sale sin contarla.
  • Finalmente imprimimos el contador total de intentos.

Notemos que no estamos considerando mayúsculas en este ejercicio básico. En este artículo hemos analizado las estructuras cíclicas, una de las estructuras fundamentales de la programación y el desarrollo web.


Aprende Programación Practicando: Retos de Lógica

La única manera de aprender ciencias de la computación es practicando. Aquí te dejo unos ejercicios resueltos para que pongas a prueba tus conocimientos en lógica algorítmica:


VARIABLES: ENTERO numero, ENTERO suma
INICIO
  // Inicializamos la suma en 0 (Acumulador)
  suma = 0
  
  // Ciclo para ingresar números hasta que la suma supere 100
  MIENTRAS (suma <= 100)
  INICIO
    IMPRIMIR "Ingrese un número"
    LEER numero
    suma = suma + numero
  FIN
  
  IMPRIMIR "La suma total alcanzada es: " + suma  
FIN

VARIABLES: ENTERO edad, mayoresDe21, menoresDe21, contador
INICIO
  mayoresDe21 = 0, menoresDe21 = 0, contador = 0
  
  MIENTRAS (contador < 10) HACER
    IMPRIMIR "Ingrese la edad de la persona " + (contador + 1)
    LEER edad
    SI (edad >= 21) ENTONCES
      mayoresDe21 = mayoresDe21 + 1
    SINO
      menoresDe21 = menoresDe21 + 1
    contador = contador + 1
  FIN_MIENTRAS
  
  IMPRIMIR "Resultados: Mayores: " + mayoresDe21 + " | Menores: " + menoresDe21
FIN

VARIABLES: PALABRA respuesta
INICIO
  respuesta = "SI"
  MIENTRAS (respuesta == "SI")
  INICIO
    IMPRIMIR "¿Desea continuar con el programa? (SI/NO)"
    LEER respuesta
  FIN
  IMPRIMIR "El sistema ha finalizado correctamente."  
FIN

VARIABLES: ENTERO suma, numero
INICIO
  suma = 0
  PARA numero = 1 A 1000
    suma = suma + numero
  FIN_PARA
  IMPRIMIR "La sumatoria total del 1 al 1000 es: " + suma  
FIN

Estrategia técnica: Este algoritmo utiliza divisiones sucesivas por 10 para descartar el dígito menos significativo hasta que el número llegue a 0, contando cada paso como un dígito.


VARIABLES: ENTERO numero, cantidadDigitos
INICIO
  cantidadDigitos = 0
  IMPRIMIR "Ingrese un número entero positivo"
  LEER numero
  
  MIENTRAS (numero > 0) 
  INICIO
    numero = numero / 10
    cantidadDigitos = cantidadDigitos + 1
  FIN
  IMPRIMIR "La cantidad total de dígitos detectados es: " + cantidadDigitos
FIN

En el siguiente artículo veremos funciones, algo que nos permite dividir un problema complejo en problemas simples, fáciles de resolver, y fomenta el trabajo en equipo.

Recursos utilizados