Estructuras repetitivas (bucles)
(Este artículo forma parte del Curso de Programación en C)
Los ordenadores se diseñaron inicialmente para realizar tareas sencillas y repetitivas. El ser humano es de lo más torpe acometiendo tareas repetitivas: pronto le falla la concentración y comienza a tener descuidos. Los ordenadores programables, en cambio, pueden realizar la misma tarea muchas veces por segundo durante años y nunca se aburren (o, al menos, hasta hoy no se ha tenido constancia de ello)
La estructura repetitiva, por tanto, reside en la naturaleza misma de los ordenadores y consiste, simplemente, en repetir varias veces un conjunto de instrucciones. Las estructuras repetitivas también se llaman bucles, lazos o iteraciones. Nosotros preferiremos la denominación bucle.
(Recuerde que la estructura repetitiva o bucle es una de las estructuras permitidas en la programación estructurada)
Los bucles tienen que repetir un conjunto de instrucciones un número finito de veces. Si no, nos encontraremos con un bucle infinito y el algoritmo no funcionará. En rigor, ni siquiera será un algoritmo, ya que no cumplirá la condición de finitud.
El bucle infinito es un peligro que acecha constantemente a los programadores y nos toparemos con él muchas veces a lo largo de este curso. Para conseguir que el bucle se repita sólo un número finito de veces, tiene que existir una condición de salida del mismo, es decir, una situación en la que ya no sea necesario seguir repitiendo las instrucciones.
Por tanto, los bucles se componen, básicamente, de dos elementos:
- un cuerpo del bucle o conjunto de instrucciones que se ejecutan repetidamente
- una condición de salida para dejar de repetir las instrucciones y continuar con el resto del algoritmo
Dependiendo de dónde se coloque la condición de salida (al principio o al final del conjunto de instrucciones repetidas), y de la forma de realizarla, existen tres tipos de bucles, aunque hay que resaltar que, con el primer tipo, se puede programar cualquier estructura iterativa. Pero con los otros dos, a veces el programa resulta más claro y legible. Los tres tipos de bucle se denominan:
- Bucle “mientras“: la condición de salida está al principio del bucle.
- Bucle “repetir“: la condición de salida está al final del bucle.
- Bucle “para“: la condición de salida está al principio y se realiza con un contador automático.
El bucle “mientras”
El bucle “mientras” es una estructura que se repite mientras una condición sea verdadera. La condición, en forma de expresión lógica, se escribe en la cabecera del bucle, y a continuación aparecen las acciones que se repiten (cuerpo del bucle):
mientras (condición) hacer
inicio
acciones (cuerpo del bucle)
fin
Cuando se llega a una instrucción mientras, se evalúa la condición. Si es verdadera, se realizan las acciones y, al terminar el bloque de acciones, se regresa a la instrucción mientras (he aquí el bucle o lazo). Se vuelve a evaluar la condición y, si sigue siendo verdadera, vuelve a repetirse el bloque de acciones. Y así, sin parar, hasta que la condición se haga falsa.
Por ejemplo, vamos a escribir un algoritmo que muestre en la pantalla todos los números enteros entre 1 y 100
algoritmo contar
variables
cont es entero
inicio
cont = 0
mientras (cont <= 100) hacer
inicio
cont = cont + 1
escribir (cont)
fin
fin
Aquí observamos el uso de un contador en la condición de salida de un bucle, un elemento muy común en estas estructuras. Observe la evolución del algoritmo:
- cont = 0. Se le asigna el valor 0 a la variable cont (contador)
- mientras (cont <= 100) hacer. Condición de salida del bucle. Es verdadera porque cont vale 0, y por lo tanto es menor o igual que 100.
- cont = cont + 1. Se incrementa el valor de cont en una unidad. Como valía 0, ahora vale 1.
- escribir(cont). Se escribe el valor de cont, que será 1.
Después, el flujo del programa regresa a la instrucción mientras, ya que estamos en un bucle, y se vuelve a evaluar la condición. Ahora cont vale 1, luego sigue siendo verdadera. Se repiten las intrucciones del bucle, y cont se incrementa de nuevo, pasando a valer 2. Luego valdrá 3, luego 4, y así sucesivamente.
La condición de salida del bucle hace que éste se repita mientras cont valga menos de 101. De este modo nos aseguramos de escribir todos los números hasta el 100.
Lo más problemático a la hora de diseñar un bucle es, por lo tanto, pensar bien su condición de salida, porque si la condición de salida nunca se hiciera falsa, caeríamos en un bucle infinito. Por lo tanto, la variable implicada en la condición de salida debe sufrir alguna modificación en el interior del bucle; si no, la condición siempre sería verdadera. En nuestro ejemplo, la variable cont se modifica en el interior del bucle: por eso llega un momento, después de 100 repeticiones, en el que la condición se hace falsa y el bucle termina.
El bucle “repetir”
El bucle de tipo “repetir” es muy similar al bucle “mientras”, con la salvedad de que la condición de salida se evalúa al final del bucle, y no al principio, como a continuación veremos. Todo bucle “repetir” puede escribirse como un bucle “mientras”, pero al revés no siempre sucede.
La forma de la estructura “repetir” es la que sigue:
repetir
inicio
acciones
fin
Cuando el ordenador encuentra un bucle de este tipo, ejecuta las acciones escritas entre inicio y fin y, después, evalúa la condición, que debe ser de tipo lógico. Si el resultado es falso, se vuelven a repetir las acciones. Si el resultado es verdadero, el bucle se repite. Si es falso, se sale del bucle y se continúa ejecutando la siguiente instrucción.Existe, pues, una diferencia fundamental con respecto al bucle “mientras”: la condición se evalúa al final. Por lo tanto, las acciones del cuerpo de un bucle “repetir” se ejecutan al menos una vez, cuando en un bucle “mientras” es posible que no se ejecuten ninguna (si la condición de salida es falsa desde el principio)
Ejemplo: Escribir un algoritmo que escriba todos los números enteros entre 1 y 100, pero esta vez utilizando un bucle “repetir” en lugar de un bucle “mientras”
algoritmo contar
variables
cont es entero
inicio
cont = 0
repetir
inicio
cont = cont + 1
escribir (cont)
fin
mientras que (cont <= 100)
fin
Observa que el algoritmo es básicamente el mismo que en el ejemplo anterior, pero hemos cambiado el lugar de la condición de salida.
El bucle “para”
En muchas ocasiones se conoce de antemano el número de veces que se desean ejecutar las acciones del cuerpo del bucle. Cuando el número de repeticiones es fijo, lo más cómodo es usar un bucle “para”, aunque sería perfectamente posible sustituirlo por uno “mientras”.
La estructura “para” repite las acciones del bucle un número prefijado de veces e incrementa automáticamente una variable contador en cada repetición. Su forma general es:
para cont desde valor_inicial hasta valor_final hacer
inicio
acciones
fin
cont es la variable contador. La primera vez que se ejecutan las acciones situadas entre inicio y fin, la variable cont tiene el valor especificado en la expresión valor_inicial. En la siguiente repetición, cont se incrementa en una unidad, y así sucesivamente, hasta alcanzar el valor_final. Cuando esto ocurre, el bucle se ejecuta por última vez y después el programa continúa por la instrucción que haya a continuación.El incremento de la variable cont siempre es de 1 en cada repetición del bucle, salvo que se indique otra cosa. Por esta razón, la estructura “para ” tiene una sintaxis alternativa:
para cont desde valor_inicial hasta valor_final inc|dec paso hacer
inicio
acciones
fin
De esta forma, se puede especificar si la variable cont debe incrementarse (inc) o decrementarse (dec) en cada repetición, y en qué cantidad (paso).
Ejemplo 1: Escribir un algoritmo que escriba todos los números enteros entre 1 y 100, utilizando un bucle “para”
algoritmo contar
variables
cont es entero
inicio
para cont desde 1 hasta 100 hacer
inicio
escribir (cont)
fin
fin
De nuevo, lo más interesante es observar las diferencias de este algoritmo con los dos ejemplos anteriores. Advierta que ahora no es necesario asignar un valor inicial de 0 a cont, ya que se hace implícitamente en el mismo bucle; y tampoco es necesario incrementar el valor de cont en el cuerpo del bucle (cont = cont + 1), ya que de eso se encarga el propio bucle “para”. Por último, no hay que escribir condición de salida, ya que el bucle “para” se repite hasta que cont vale 100 (inclusive)
Ejemplo 2: Escribir un algoritmo que escriba todos los números enteros impares entre 1 y 100, utilizando un bucle “para”:
algoritmo contar
variables
cont es entero
inicio
para cont desde 1 hasta 100 inc 2 hacer
inicio
escribir (cont)
fin
fin
Este ejemplo, similar al anterior, sirve para ver el uso de la sintaxis anternativa del bucle “para”. La variable cont se incrementará en 2 unidades en cada repetición del bucle.
Comentarios
Publicar un comentario