ESTRUCTURAS REPETITIVAS
si-no
fin_mientras
Es
imprescindible que se establezcan mecanismos para controlar esta tarea
repetitiva, ya que si éstos no existen, el bucle puede convertirse en un
proceso infinito. Así, en el bucle representado por el
organigrama de la Figura 3.10, se observa que las instrucciones incluidas en él
se repiten indefinidamente. El mecanismo de control citado se establece
mediante una condición que se comprueba en cada paso o iteración del bucle. En la Figura 3.11, se coloca una condición
tras la lectura de la variable N (comprobar si su valor es cero), de forma que
tenemos la oportunidad de que el bucle deje de ser infinito, ya que podrá
interrumpirse cuando la condición sea verdadera.
Los procesos que se repiten varias
veces en un programa necesitan en muchas
ocasiones contar el numero de repeticiones habidas. Una forma de hacerlo es
utilizar una variable llamada contador, cuyo
valor se incrementa o decrementa en una cantidad constante en cada repetición
que se produzca. La Figura 3.12 presenta un diagrama de flujo para un algoritmo
en el que se desea repetir 50 veces un grupo de instrucciones, que llamaremos
cuerpo del bucle, donde el contador se representa con la variable CONT. La
instrucción que actualiza al contador es la asignación:
CONT ¬ CONT+1.
El contador puede ser positivo (incrementos de uno en
uno) o negativo (decrementos de uno en uno). En la Figura 3.12, el contador
cuenta desde 1 a 50 y deja de repetirse cuando la variable CONT toma el valor
51 y termina el bucle. En la Figura 3.13 se muestra un algoritmo que efectúa la
operación de multiplicación n x m, sumando m un número n de veces. En él, el
contador se decrementa: comienza a contar en n y se va decrementando hasta llegar a cero; en ese momento se
termina el bucle y se realiza la acción escribir.
Otro tipo de variable, normalmente
asociada al funcionamiento de un bucle es un acumulador o totalizador, cuya misión es almacenar una cantidad
variable, resultante de operaciones sucesivas y repetidas. Un acumulador
realiza una función parecida a la de un contador, con la diferencia de que el
incremento o decremento, de cada operación es variable en lugar de constante.
En la Figura 3.11 la instrucción, SUMA ¬ SUMA + N, añade en cada
iteración el valor de la variable N, leída a través de un periférico, por lo
que SUMA es un ejemplo de acumulador.
Una estructura
repetitiva es aquella que marca la reiteración de una serie de acciones basándose en un bucle. De acuerdo
con lo anterior, esta estructura debe constar de tres partes básicas:
-
decisión (para finalizar la repetición)
- cuerpo del bucle (conjunto de instrucciones que se repiten)
- salida del bucle (instrucción a la que se accede una vez se decide finalizar)
Tomando el caso de la Figura 3.11, donde para obtener
la suma de una serie de números, hemos utilizado la estrategia siguiente: tras
leer cada número lo añadimos a una variable SUMA que contenga las sucesivas
sumas parciales (SUMA se hace igual a cero al inicio). Observemos que el
algoritmo correspondiente deberá utilizar sucesivamente instrucciones tales como:
leer número
si N < 0 entonces
escribir SUMA
si-no
SUMA ¬SUMA+número
fin-si
que se pueden
repetir muchas veces; éstas constituyen el cuerpo del bucle.
Una vez se ha decidido el cuerpo del bucle, se
plantea la cuestión de cuántas veces se debe repetir. De hecho conocemos ya la
necesidad de contar con una condición para detener el bucle. En el Ejemplo 8,
se pide al usuario el número N de números que desea sumar, esto es, el número
de iteraciones del bucle. Usamos un
contador de iteraciones, TOTAL, que se inicializa a N y a continuación se decrementa
en uno cada vez que el bucle se repite; para ello introducimos una acción más
al cuerpo del bucle: TOTAL ¬ TOTAL -1. También podríamos inicializar la variable TOTAL en 0 o en
1, e ir incrementándolo en uno, en cada iteración, hasta llegar al número
deseado N.
Ejemplo:
Hallar la suma de N números, a través de una estructura repetitiva
algoritmo suma_números
{leer número
total de números a sumar en variable N} TOTAL ¬ N
SUMA ¬ 0 { la suma parcial es 0 al
inicio}
{comienzo de bucle}
mientras que TOTAL > 0 hacer
leer número
SUMA ¬ SUMA+número TOTAL ¬ TOTAL-1
fin_mientras
{fin del bucle}
escribir “la suma de los” , N , “números es “ , SUMA
Aunque la condición de finalización
puede evaluarse en distintos lugares del algoritmo, no es recomendable que ésta
se pueda efectuar a mitad del cuerpo del
bucle, por lo que es bueno que se produzca al principio o al final del mismo.
Según donde se sitúe la condición de salida, dará lugar a distintos tipos de
estructuras repetitivas que analizaremos a continuación: estructura desde-hasta, estructura mientras y estructura repetir-hasta_que.



Comentarios
Publicar un comentario