7.1 Introducción Un ciclo es una estructura que nos permite representar un conjunto de instrucciones que debe repetirse una cantidad limitada de veces, normalmente dependiente de una condición o de una cantidad determinada de repeticiones o iteraciones. Los ciclos permiten iterar todo un proceso tantas veces como el programador (ó el usuario) lo determine. Es común, que en la solución de muchos problemas algorítmicos, se requiera realizar la repetición de cierto bloque de instrucciones, con el fin de obtener el objetivo buscado por el algoritmo. Para implementar repetición de bloques de instrucciones se utilizan los estructuras de control llamadas ciclos o estructuras repetitivas. 7.2 Concepto General Un ciclo puede definirse como una estructura que nos permite repetir o iterar un conjunto de instrucciones y que tiene las siguientes características: El conjunto de instrucciones a repetir dentro del ciclo debe ser finito La cantidad de veces que se repita dicho conjunto de instrucciones también debe ser finita. En algunos casos esta cantidad de veces va a depender de una condición explícita y en otros casos va a depender de una condición implícita. Una condición es explícita cuando depende solamente de la misma ejecución del programa sin que sea importante la participación del usuario. Asimismo una condición es implícita cuando depende solamente de la voluntad del usuario y por lo tanto la cantidad de iteraciones o repeticiones del ciclo podría llegar a ser diferente cada vez pues sería posible que cambiara con cada usuario. Deben estar claramente demarcados el inicio y el fin del ciclo. En los casos en los cuales solo exista una instrucción a iterar, no serán necesarias dichas marcas. Dentro de un ciclo podrá ir cualquiera de las otras estructuras, incluyendo otros ciclos. 7.3 Tipos de Ciclos A continuación se describe la estructura de construcción de cada uno de los ciclos tal como son concebidos por la mayoría de lenguajes de programación y posteriormente se utilizaran para representar el mismo algoritmo con cada una de las estructuras. 7.3.1 Ciclo while (Mientras) El ciclo while representa el esquema general de trabajo para todos los ciclos, esto quiere decir que si se entiende claramente la lógica de funcionamiento de este ciclo se facilita entender no solo los otros ciclos. Es útil saber que este ciclo también es llamado en algunos libros el Ciclo Mientras Que. La estructura general de este ciclo en lenguaje C es la siguiente: while (expresion_condicional) { ... instrucciones_del_cuerpo_del_ciclo ... instrucciones_que_modifican_el_resultado_de_la_condicion } Su forma de ejecución es muy sencilla: Mientras se cumpla que la condición sea Verdadera entonces se ejecutará el Cuerpo del Ciclo. De igual forma también se podría decir que el Cuerpo del Ciclo se repetirá tantas veces como lo permita la condición o mientras dicha condición sea Verdadera. En condiciones normales la cantidad de veces que se repita el cuerpo del ciclo será siempre una cantidad finita y deberá existir, dentro del mismo cuerpo del ciclo, una o mas instrucciones que hagan que en algún momento la condición sea Falsa. La siguiente ilustración muestra un esquema de la forma como el ciclo mientras funciona en el lenguaje C: Figura 7.1. Esquema Ciclo while. El ciclo while se puede describir de la siguiente forma: cuando el computador encuentra la estructura while verifica la condición del ciclo, si la condición es verdadera se ejecutan las instrucciones al interior del ciclo, luego de ejecutar la última condición del ciclo se vuelve a evaluar la condición, sí continúa siendo cierta se vuelve a ejecutar el bloque de instrucciones del ciclo. Cuando la condición se hace falsa el computador se salta el bloque de instrucciones del ciclo y continúa con la ejecución del resto de instrucciones del programa. 7.3.2 Ciclo for (Para o Desde) La estructura general de este ciclo en lenguaje C es la siguiente: for (control=valor_inicial;control<=valor_tope;incremento_control) { ... instrucciones_del_cuerpo_del_ciclo ... } La forma de ejecución del ciclo es la siguiente: control representa una variable que va a tomar valores iniciando en valor_inicial y terminando en valor_tope avanzando con un incremento. En los casos en los que no se especifica el valor del paso la mayoría de los lenguajes de programación asume el incremento de 1, sin embargo el lenguaje C requiere que la variable de control sea incrementada, P.Ej.: Si la variable de control se llama vi y el paso es de 1 el incremento de la variable de control se define así, vi=vi+1. El Cuerpo del Ciclo se ejecutará una vez por cada valor que tome la variable control. Veamos con un ejemplo cuál sería la aplicación de este ciclo. En el siguiente ejemplo se muestra una aplicación de esta estructura. Ejemplo 1. Escribir los números impares comprendidos entre 1 y 100. #include <stdio.h> int main() { int numero,vc; for(vc=1; vc<=100; vc=vc+2) { printf("\nImpar %d: %d",vc/2+1,vc); } return(0); } El programa del ejemplo produce una salida por pantalla similar a: "Impar 3: 5". Y serán 50 salidas, una por cada impar entre 1 y 100. El siguiente ejemplo resuelve el mismo problema pero usando la estructura while mencionada en el apartado anterior. Ejemplo 2. Escribir los números impares comprendidos entre 1 y 100. #include <stdio.h> int main() { int vc; vc=1; while(vc<=100) { printf("\nImpar %d: %d",vc/2+1,vc); vc=vc+2; } return(0); } Los dos programas de ejemplo logran el mismo objetivo lo cual significa que ambas versiones son correctas. Es importante anotar que cada ciclo siempre va a tener una variable que es la que almacena el valor de inicio del ciclo, es la que va a estar presente en la evaluación de la condición y es la que se incrementa para que en algún momento la condición sea Falsa. Es evidente que esta variable es muy importante por ello a éste tipo de variables se le ha dado el nombre de índice o variable de control del Ciclo. Se puede decir que el índice del ciclo es la variable que permite la ejecución del cuerpo del ciclo. Un ciclo puede llegar a tener varios índices al tiempo. Como los índices no son mas que variables entonces varios ciclos pueden tener el mismo índice siempre que se utilice éste en un ciclo solo hasta cuando haya terminado la ejecución del ciclo anterior que utilizó esta variable. 7.3.3 Ciclo do / while Este ciclo carece de representación algorítmica equivalente, sin embargo es similar en funcionalidad al ciclo repetir hasta o hacer hasta, con la diferencia que el ciclo hacer hasta se repite siempre que la condición resulte falsa y el ciclo do - while se repite si la condición es verdadera, lo que implicaría que en un algoritmo que utiliza la estructura hacer- hasta, en su implementación en lenguaje C debe hacerse un pequeño cambio en la forma de la condición. La estructura general de este ciclo en lenguaje C es la siguiente: do{ ... instrucciones_del_cuerpo_del_ciclo ... instrucciones_que_modifican_el_resultado_de_la_condicion }while (expresion_condicional); Podría decirse que esta es una inversión de la estructura del ciclo while. En este ciclo el cuerpo del mismo se repite mientras la condición sea Verdadera y su única diferencia con el ciclo while es que en el Ciclo do - while primero se ejecuta el cuerpo del ciclo y luego se evalúa la condición en cambio en el ciclo while primero se evalúa la condición y luego se ejecuta el cuerpo del ciclo. Tenga en cuenta que al final de la condición en el ciclo do-while se debe poner punto y coma (;), a diferencia de los ciclos anteriores. Ejemplo 3. Escribir los números impares comprendidos entre 1 y 100. #include <stdio.h> int main() { int vc; vc=1; do{ printf("\nImpar %d: %d",vc/2+1,vc); vc=vc+2; }while(vc<=100); return(0); }