Está en la página 1de 6

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica



AO 2 Nm. 3 19 de mayo de 2004



Ciclos iterativos
L. Franco S., A. Snchez V., V. Fuentes G.

La mayora de los programas escritos en C, incluyen repeticiones o ciclos tambin son conocidos
como iteraciones, que permiten repetir un bloque de instrucciones mientras se conserve verdadera
alguna condicin de continuacin. Las instrucciones que se repiten forman lo que se llama el
cuerpo del ciclo. El lenguaje C incorpora tres sentencias de este tipo: while, do- while y for.

Cada uno de estos ciclos esta formado por:
Valor inicial;
Valor final;
Incremento;
ndice.

Cada uno de estos ciclos requiere adems de dos elementos bsicos de programacin:
acumulador y contador.

Contador: Es una variable que nos permite incrementar y/o decrementar el ndice durante el ciclo.
Un contador (variable) puede ser declarada de tipo (int, float, long, etc.).

Acumulador: Es una variable que nos permite almacenar resultados parciales durante el ciclo.

En C se manejan dos tipos de repeticiones, la repeticin controlada por un contador que se le
conoce comnmente como repeticin definida, ya que antes de que inicie la ejecucin del ciclo, el
nmero de iteraciones es conocido. Y la repeticin controlada por un centinela que se conoce a
menudo como repeticin indefinida, debido a que el nmero de iteraciones no es conocido.

Ciclo While

El bucle while se ejecuta mientras una condicin es cierta. Cuando esta condicin se torna falsa, el
ciclo termina su operacin.

/* Este es un ejemplo del bucle while. */
# include <stdio.h>
int main()
{
int contador;
contador = 0;
while (contador < 6)
{
printf ("El valor de contador es %d\n", contador);
contador = contador + 1;
}
return 0;
}

En este programa empezamos con un comentario y el punto de entrada main(), despus definimos
una variable de tipo entero a la que llamamos contador dentro del cuerpo del programa, esta
variable es inicializada a cero para despus entrar en el bucle while. La sintaxis del bucle while es

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica

AO 2 Nm. 3 19 de mayo de 2004



justamente como se muestra en el programa. A la palabra clave while le sigue una expresin entre
parntesis y luego una serie de enunciados encerrados entre llaves.

Mientras la condicin sea verdadera, los enunciados entre llaves se ejecutarn repetidamente. En
este caso, debido a que la variable contador es incrementada en 1 cada que los enunciados entre
llaves son ejecutados, eventualmente se alcanzar el valor de 6. En este punto los enunciados no
se ejecutarn mas porque contador ya no es menor que 6 finalizando as el bucle. El programa
continuar entonces con los enunciados que siguen a las llaves. La variable contador es
inicializada con un valor mayor de que 5, los enunciados dentro de las llaves podran no ejecutarse
por lo que es posible tener un bucle que jams se ejecute. Si la variable no se incrementa dentro
del bucle este jams terminara y por ende el programa.

Ciclo do-while

Tenemos ahora una variacin del ciclo while en nuestro siguiente ejemplo, este programa es casi
idntico al ejemplo anterior excepto que el bucle inicia con la palabra clave do, seguida por una
serie de enunciados compuestos entre llaves, despus viene la palabra clave while y finalmente la
expresin de evaluacin entre parntesis.

/* Este es un ejemplo del bucle do-while */
# include <stdio.h>
int main()
{
int i;

i = 0;
do
{
printf ( "El valor de i es ahora %d\n", i );
i = i + 1;
}
while (i < 5);
return 0;
}

Los enunciados entre llaves se ejecutan iterativamente en tanto que la expresin entre parntesis
sea verdadera. Cuando la expresin es falsa, la ejecucin del bucle termina y el control del
programa pasa a los enunciados siguientes. Respecto al bucle do-while debemos apuntar lo
siguiente: en primer lugar, debido a que la condicin verdadero-falso se hace al final del bucle, los
enunciados dentro de las llaves se ejecutan al menos una vez. En segundo, si la variable i no
cambia dentro del bucle entonces el programa jams terminara.

El ciclo for

El bucle for consiste de la palabra clave for seguida de una expresin entre parntesis. Esta
expresin se compone realmente de tres campos cada uno separado por un punto y coma, como
se observa en el siguiente ejemplo:




FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica

AO 2 Nm. 3 19 de mayo de 2004



/* Este es un ejemplo del bucle for */
#include <stdio.h>

int main()
{
int indice;

for(indice = 0 ; indice < 6 ; indice = indice + 1)
printf ( "El valor de indice es %d\n", indice);
return 0;
}

El primer campo contiene la expresin "indice = 0" y se le llama campo de inicializacin. Cualquier
expresin en este campo se ejecuta antes del inicio del bucle, en trminos generales se puede
decir que no existe lmite en el contenido del primer campo ya que es posible contener varios
enunciados separados por comas. El segundo campo, que en este caso contiene "indice < 6 " es
la prueba que se hace al principio de cada ciclo del bucle y puede ser cualquier expresin que
pueda evaluarse a verdadero falso. La expresin del tercer campo se utiliza para incrementar el
valor del ndice en una unidad cada vez que se ejecute el cuerpo del for.

En seguida de la expresin for ( ) estn uno o varios enunciados que conforman el cuerpo
ejecutable del bucle. Un enunciado compuesto es cualquier grupo de instrucciones vlidas en C
encerradas entre llaves.


Programa ejemplo

El siguiente ejemplo muestra la manera de utilizar las estructuras de control descritas
anteriormente. El programa calcula la desviacin estndar de una serie de datos que se almacenan
en un arreglo. La funcin LeeDatos() permite ingresar los datos al arreglo mediante un ciclo for; la
funcin Impdatos() muestra los datos que se ingresaron y el usuario podr verificar si los datos se
ingresaron correctamente, para hacer esto, utiliza la estructura while. La funcin DesEst() es la
encargada de realizar el clculo de la desviacin y utiliza el ciclo for.

El programa despliega un men en el cual se describen las operaciones que se podrn realizar, el
usuario solamente tiene que seleccionar una de las opciones que se muestran y seguir las
indicaciones que se van mostrando. Para hacer que este men sea iterativo hasta que el usuario
selecciona la opcin salir, se hace uso de la estructura do-while, que permite ejecutar por lo menos
una vez el men.

/* Calcula la desviacin estndar */
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define NUM_DAT_MAX 100

int LeeDatos(float[], int);
float DesEst(float[], int);
void ImpDatos(float[], int);

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica

AO 2 Nm. 3 19 de mayo de 2004




int main()
{
int n = 0, opcion;
float des_est, Arreglo[NUM_DAT_MAX];

do
{
clrscr();
printf("\n 1. Ingresar datos ");
printf("\n 2. Ver datos ingresados ");
printf("\n 3. Calcular desviacion estandar ");
printf("\n 4. salir ");
printf("\n\n\t Seleccione una opcion... ");

opcion = getch();

switch (opcion)
{
case '1':
n = LeeDatos(Arreglo, NUM_DAT_MAX);
break;
case '2':
clrscr();
if(n)
ImpDatos(Arreglo, n);
else
printf("\nPrimero es necesario ingresar los datos");

getch();
break;
case '3':
clrscr();
if(n)
{
des_est = DesEst(Arreglo, n);
printf("\nLa desviacion estandar es %f ", des_est);
}
else
printf("\nPrimero es necesario ingresar los datos");

getch();
break;
case '4':
clrscr();
gotoxy(39, 10);
printf("\n Gracias por utilizar nuestro programa");
break;
default:
clrscr();

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica

AO 2 Nm. 3 19 de mayo de 2004



printf("\a\nLa seleccion no es valida");
getch();
}
}
while (opcion != '4');
getch();
return (0);
}

int LeeDatos(float Arreglo[], int NMAX)
{
int i, n;

clrscr();
printf("Ingrese el numero de datos a procesar ");
scanf("%i", &n);

if(n > NMAX) n = NMAX - 1;

for (i = 1; i <= n; i++)
{
printf("Ingrese el dato %i ", i);
scanf("%f", &Arreglo[i]);
}
return n;
}

void ImpDatos(float Arreglo[], int n)
{
int i;

i = 1;
printf("Los datos a procesar son: [");
while (i <= n)
{
printf("%4.2f, ", Arreglo[i]);
i += 1;
}
printf("\b\b]");
}

float DesEst(float Arreglo[], int n)
{
int i;
float s, s2, varianza;

s = s2 = 0;
for (i = 1; i <= n; i++)
{
s += Arreglo[i];

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica

AO 2 Nm. 3 19 de mayo de 2004



s2 += Arreglo[i]*Arreglo[i];
}
varianza = (s2 - s * s / n) / (n - 1);
return sqrt(varianza);
}

También podría gustarte