LABORATORIO 07: ESTRUCTURAS REPETITIVAS


7.1 Introducción
7.2 Concepto General
7.3 Tipos de Ciclos
7.4 Actividades

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:

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);
}

7.4 Actividades

Para el siguiente problema resuelto algorítmicamente, realizar la implementación

Enunciado: Elaborar un diagrama de flujo que imprima la siguiente secuencia:

1, 5, 3, 7,5,9,7 11,....23.

Solución

Análisis del problema: Para representar esta serie tenemos que encontrar primero cual es el patrón que determina la serie, por simple observación podemos encontrar que hay dos variaciones en la serie, primero el segundo elemento es igual al primero más 4 y el tercero es igual al segundo menos 2 y así sucesivamente. Por lo tanto, la serie es alternante, es decir, varía entre dos patrones diferentes. Para resolver el problema planteado podemos crear un ciclo controlado por una variable que toma valores entre 1 y 23, que además en cada iteración del ciclo va a alternar el factor de variación de la serie, lo cual podemos hacer con una estructura condicional, cuya condición se cumpla en un ciclo y no se cumpla en el siguiente.

Entrada: Este algoritmo no tiene datos de entrada dado que el eneuciado del problema nos proporciona toda la información necesaria.

Salida: Impresión de cada uno de los elementos de la serie.

El algoritmo solución de este problema esta implementado usando una estructura repetitiva de control, repetir hasta, esta estructura particular no tiene representación en lenguaje C/C++. Sin embargo se puede implementar con la estructura de control do-while, cambiando la lógica de la condición de control del ciclo.

1. Realizar la implementación del algoritmo planteado en lenguaje C/C++.

2. De ser posible realizar la implementación del algoritmo planteado en lenguaje C/C++, utilizando un algoritmo equivalente haciendo uso de la estructura de control mientras. Si no es posible realizar la implementación, explique.

3. De ser posible realizar la implementación del algoritmo planteado en lenguaje C/C++, utilizando un algoritmo equivalente haciendo uso de la estructura de control desde o para. Si no es posible realizar la implementación, explique.


INGENIERO NESTOR DIAZ
FIET - UNICAUCA
2005