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).
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.
La sintaxis lógica se escribe de la siguiente manera para garantizar un control de flujo correcto:
Arquitectura básica de un ciclo repetitivo.
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.
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.
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:
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.
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 PARA (FOR) itera sobre una secuencia definida, ideal para cuando sabemos de antemano cuántas repeticiones tenemos que hacer.
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:
Entonces, la lógica del algoritmo queda:
Para número 1 a 100 imprimo número fin del ciclo. ¡En solo tres líneas de código profesional resolvimos el problema!
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.
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.
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.
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.
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.
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.
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.
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.