Estructuras repetitivas en Programación

Las estructuras repetitivas en programación, también denominadas bucles, te van a servir para poder repetir ciertas sentencias de código, bien un número determinado de veces, bien mientras se cumpla una condición.

Los ordenadores son buenos haciendo tareas repetitivas: siguen exactamente las instrucciones dadas y lo hacen muy rápidamente. Pero imagina que tuvieras que escribir escribir las mismas instrucciones para cada repetición. Cuánto tiempo perderías, ¿no?. Además cada nueva repetición aumentarías las posibilidades de cometer un fallo al escribir. Y lo que es peor, imagina que luego quieres cambiar algo del código que se repite, tendrías que hacerlo cada vez que lo has escrito.

Imagina que tienes que controlar un robot y tiene que andar en línea recta una serie de pasos. Podrías crear un código como el siguiente:

Andar paso
Andar paso
Andar paso
Andar paso

Eso haría que el robot andara 4 pasos. ¿Y si tiene que andar 10 pasos, repites 10 veces la misma línea? No es necesario, porque para eso tenemos las estructuras repetitivas (bucles). Así, podríamos escribir:

Repite 10 veces
    Andar paso

Eso es genial, porque me evita tener que escribir un montón de código. Pero, ¿y si tiene que andar hasta llegar a una pared? No sabemos los pasos que tiene que andar. En ese caso existen estructuras repetitivas que permiten repetir tu código mientras una condición se cumpla.

Mientras no llegue a la pared
    Andar paso

También podríamos expresarlo de otra forma, en la que nos aseguramos que al menos se anda un paso.

Repetir
    Andar paso
Mientras no llegue a la pared

La diferencia entre el bucle ‘mientras’ y el bucle ‘repetir mientras’ es básicamente esa: en el ‘mientras’, si el robot está pegado a la pared no andaría, porque al comprobar si ha llegado a la pared vería que sí y se pararía. Sin embargo en el bucle ‘repetir mientras’ siempre andaría un paso, ya que comprueba si ha llegado a la pared al final.

La vida diaria está llena de ejemplos en los que podríamos aplicar estructuras repetitivas:

  • Repite ‘decir Hola’ hasta que alguien conteste (repetir-mientras)
  • Repetir por siempre ‘inspirar y expirar’ (condición que nunca es falsa)
  • Mientras haya ejercicios de programación ‘hacer siguiente ejercicio’ (mientras)
  • Haz 10 repeticiones de abdominales (repetir con contador)

Básicamente tenemos 2 tipos de bucles o estructuras repetitivas, que han quedado reflejadas en los ejemplos anteriores.

Estructuras repetitivas con contador

Por un lado tenemos los bucles con contador, que repiten las instrucciones que contiene el cuerpo de la estructura un número determinado de veces. Su estructura básica es la siguiente:

Repetir n veces
    Cuerpo
Fin Repetir

Considera el cuerpo del bucle como el conjunto de instrucciones que quieres que se repitan.

También es posible que lo encuentres en el siguiente formato:

Para i desde 1 hasta 10 con paso 1
    Cuerpo
Fin Para

Cuando un ordenador recibe este tipo de estructuras establece un contador a 0 y ejecuta las instrucciones del cuerpo. Después de cada iteración, es decir, después de ejecutar el cuerpo del bucle, aumenta el contador. El proceso se repite hasta que el contador llegue a l número indicado, en cuyo caso termina.

Por todo esto es bueno utilizar los bucles con contador cuando sabemos a priori el número de veces que queremos realizar una tarea: imprimir 3 copias de un documento, insertar 8 filas en una tabla, etc. Mira un ejemplo:

Repetir 10 veces
    pintar celda "azul"
    pintar celda "rojo"
    pintar celda "verde"
Fin Repetir

Estructuras repetitivas con centinela

Imagina que no sabemos cuántas filas tenemos que insertar en la tabla pero queremos parar cuando lleguemos al final de la página. En este caso es mejor usar un bucle con condición.

Estas estructuras repiten el cuerpo del bucle mientras se cumpla la condición, a la que llamaremos centinela o condición centinela. Su estructura básica es la siguiente:

Mientras condición
    Cuerpo
Fin Mientras

De esta forma se repetirán las instrucciones del cuerpo mientras la condición sea cierta, por ejemplo: mientras no se alcance el final de la fila inserta filas en la tabla. Otro ejemplo:

Mientras haya celdas en blanco
    pintar celda "azul"
    pintar celda "rojo"
    pintar celda "verde"
Fin Mientras

En los bucles mientras el ordenador comprueba si la condición se satisface, en cuyo caso ejecuta las tareas del cuerpo. Esto continuará así hasta que no se satisfaga la condición, parando entonces la ejecución de esas tareas. Es por esto muy importante tener muy claro que en algún momento tienes que hacer que la condición no se cumpla; de lo contrario el bucle se repetirá sin fin.

La variante hacer-mientras o repetir-mientras lo que hace es pasar la condición al final, de forma que el cuerpo se va a ejecutar siempre al menos una vez.

Repetir
    pintar celda "azul"
    pintar celda "rojo"
    pintar celda "verde"
Mientras haya celdas en blanco

Estructuras para-cada

Existe otra forma más de dar instrucciones de repetición a un ordenador. Podríamos definir por ejemplo una secuencia de colores en una lista y decirle al ordenador que repita una serie de instrucciones para cada uno de los elementos de esa lista.

Finalmente, hay una variante de este tipo de bucles que sirve cuando tenemos una lista con un número determinado de elementos y queremos hacer algo con cada uno de esos elementos, por ejemplo, «para cada producto de la lista de la compra suma su precio».

Para cada color en lista_de_colores
    pintar celda color
Fin Para

¿Por qué esta forma parece más corta que las anteriores? Simplemente porque los colores con los que debemos pintar están ya en la lista. Se hace uso de la variable color que va cambiando a cada iteración del bucle, cogiendo de forma secuencial los valores de la lista.

Resumen

Los bucles se usan mucho en programación porque ahorran tiempo, reducen errores y son más fáciles de leer. Es importante que te familiarices con cada uno de los tipos de bucles que se usan. Hacerlo hará de ti mejor programador:

  • Un bucle es una estructura cuyas instrucciones (cuerpo) se escriben una vez pero pueden repetirse.
  • Cada ejecución de esas instrucciones se denomina iteración.
  • Los bucles para (bucles controlados por contador) se repiten un número determinado de veces.
  • Las estructuras repetitivas mientras (bucles controlados por condición) se repiten hasta que su condición cambie.
  • Los bucles for-each (bucles controlados por colección) se repiten para cada elemento de la colección.