La composición iterativa

La composición alternativa nos ha introducido la posibilidad de elegir un proceso entre varios dependiendo de un estado inicial. De todas formas, con las estructuras hasta ahora estudiadas no podemos describir procesos cuya duración dependa del estado inicial. De forma similar a las estructuras alternativas, la estructura iterativa tiene, en algún punto, la evaluación de una determinada expresión que permite decidir la continuación del proceso o su aborto. Es decir, existe también una condición lógica. Nombraremos bucle al conjunto de instrucciones que debe repetirse un número determinado de veces, y llamamos iteración a cada ejecución del bucle.

Para resolver este problema adoptaremos en nuestra notación algorítmica la estructura

mientras B hacer S finmientras

Donde B es una expresión lógica y S es una instrucción. Al principio de la ejecución, la condición B, llamada condición de continuación de la estructura iterativa, es comprobada y en caso de ser cierta, se procesa la instrucción S, usualmente conocida como cuerpo del bucle; esto se repite hasta que la condición B no se cumpla. En las estructuras iterativas la condición lógica mantendrá un determinado valor que permita ir repitiendo el bucle, pero habrá que tener la seguridad de que llegará un momento en que la condición lógica cambie de valor para asegurar la salida del bucle. De lo contrario, entraríamos en lo que se llama un bucle infinito, lo que provoca la “colgada” del programa, ya que no evoluciona y, evidentemente, no termina.

¿Y cómo puede cambiar el valor de la condición lógica? Pues sobre la base de los valores de las variables que se van modificando en el mismo bucle.

Las estructuras iterativas permiten repetir una misma secuencia de instrucciones hasta que se cumpla o se deje de cumplir una serie de condiciones.

Debe haber por tanto variables que deben ir modificando su valor y que nos permitan controlar la finalización del bucle.

Iteración controlada por un contador

Un contador es una variable de tipo entero cuyo valor aumenta o disminuye de forma constante en cada ejecución del bucle. Se suelen utilizar para contar cuántas veces se efectúa una determinada operación (o conjunto de operaciones).

Ejemplo: Ejecutar una tarea 10 veces

Programa Repetir_tarea
var contador: entero; finvar
  contador := 0;
mientras contador < 10 hacer
  <Ejecutar tarea>
  contador := contador +1;
finmientras
fiPrograma

En este ejemplo, la variable contador nos asegura que el cuerpo del bucle se ejecutará 10 veces.

Iteración controlada por un centinela

Es una variable la que podrá tener un valor (que puede ser numérico, booleano, carácter, etc.) que nos indique cuándo debe finalizar un bucle.

Ejemplo: Leer notas desde teclado. Para finalizar, nos introducirán el valor -1;

Programa Notas
var nota : entero; finvar
  leer(nota);
mientras (nota ≠ -1) hacer
  <Ejecutar lo que sea necesario >
  leer(nota);
finmientras 
fiPrograma

En este caso nos estamos asegurando de que cuando el usuario introduzca un -1, el bucle finalice; Hay que ver que a diferencia del punto anterior, en este caso no sabemos a priori cuántas vueltas dará el bucle.

Acumuladores

Un acumulador es una variable destinada a almacenar cantidades variables provenientes de los resultados obtenidos en operaciones previamente realizadas de forma sucesiva, lo que nos permitirá obtener el total acumulado de estas cantidades. En principio no tienen como objetivo controlar el número de vueltas. Al igual que los contadores deben ser inicializados pero es necesario tener en cuenta la operación matemática para la que se utilizarán.

Ejemplo: Calcular la suma de los valores introducidos por teclado. Para finalizar ente introducirán el valor -1.

Programa Suma
var centinela, acumulador : entero; finvar
  acumulador:=0;
  leer(centinela);
mientras (centineta ≠ -1) hacer
  acumulador := acumulador + centinela;
  leer(centinela);
finmientras
finPrograma

En ese caso la variable acumulador irá almacenando el total de los valores introducidos hasta el momento. Hay que ver la importancia de la inicialización a 0 para que la primera suma funcione.

  • Si estuviéramos acumulando productos debería haberse inicializado a 1.

Composiciones iterativas en C

Estructura iterativa while

El lenguaje C también dispone de la estructura repetitiva mientras... hacer. Es la estructura while y su sintaxis es la siguiente:

while (condición) {
  <conjunto de instrucciones a ejecutar>;
}

Hay que tener en cuenta:

  • La condición debe ir siempre entre paréntesis.
  • Si el conjunto de instrucciones que debemos ejecutar consiste en una única instrucción, símbolos {} se pueden ahorrar. Por tanto, si después de la condición no hay texto enmarcado entre {}, significa que el cuerpo de instrucciones a ejecutar está formado por una única instrucción.
  • Recuerde que en lenguaje C no existe el valor lógico y, por tanto, la condición puede ser una expresión de cualquier tipo que será evaluada como cierta si no es cero

Estructura iterativa do-while

La sintaxis de esta estructura es la siguiente:

do
{
  secuencia de instrucciones;
}
while (condición);

Esta construcción funciona de forma muy similar a la construcción while. Al contrario sin embargo, ejecuta primero el bucle y después evalúa la condición. Por tanto el bucle se ejecuta por lo menos una vez.

Sentencias break y continue

C proporciona dos mecanismos para alterar la ejecución de las construcciones iterativas: las sentencias break y continúe.

break

Esta sentencia tiene una doble finalidad. Por un lado indica el final de un case en la construcción switch. Por otra parte, para forzar la finalización inmediata de la ejecución de un bucle. De esta forma se permite salir de la construcción repetitiva ignorando la evaluación de la condición.

continue

Esta sentencia se utiliza sólo en las construcciones repetitivas. Su función es la de evitar que se ejecute todo el código a continuación de ella y hasta el final del cuerpo del bucle, durante una iteración determinada.

Nota: Está bien que se conozca la existencia de estas sentencias y su funcionamiento, pero NUNCA las utilizaremos en clase, excepto en el caso del switch.

Pin It