[Tutorial C] II.5 - Bucles

Ver el tema anterior Ver el tema siguiente Ir abajo

[Tutorial C] II.5 - Bucles

Mensaje  HarZe el Lun Dic 07, 2009 9:47 pm

Bucles

Hay 3, y un cuarto que es una mezcla de bucle y condicionador.

El bucle clásico es este:
Código:
for ( valor inicial; condicion para seguir; orden de repetición)
{
    codigo del bucle
}
Un ejemplo es lo mejor, pero como esto se usa sobre todo con tablas o arrays, ahora mismo no verás su utilidad. Aun así, ahí va un ejemplo bastante tonto:
Código:
int i;
for ( i=0 ; i < 10 ; i++ )
{
    printf("Si i es %i, i al cuadrado es %i \n",i,i*i);
}
La salida es:

Si i es 0, i al cuadrado es 0
Si i es 1, i al cuadrado es 1
Si i es 2, i al cuadrado es 4
Si i es 3, i al cuadrado es 9
Si i es 4, i al cuadrado es 16
Si i es 5, i al cuadrado es 25
Si i es 6, i al cuadrado es 36
Si i es 7, i al cuadrado es 49
Si i es 8, i al cuadrado es 64
Si i es 9, i al cuadrado es 81


El código empieza con i igual a 0, se va aumentando en uno con i++ y repitiendo el código a cada vez, mientras que i < 10, por eso cuando es 10, ya no sale, se acaba el bucle. Su funcionamiento es muy simple, experimenta. Como ya he dicho, volveremos a verlo con las tablas o arrays.

El bucle de condicion sin variación, es decir, se repite el código mientras se cumpla una condición, pero no hay una variable que vaya cambiando. Se usa como bucle principal de un programa, o para bucles donde la condición puede cambiar sin necesidad de una variable auxiliar como en for. Ejemplo:
Código:
int r = 5;
while (r < 100)
{
    r = r * r;
}
Es un ejemplo muy estúpido, pero válido para entenderlo, solo de hará dos veces el bucle, cuando vale 5, y cuando vale 25. Cuando vale 125 ya no. Un bucle infinito, que normalmente es el que contiene la base de un programa es así:
Código:
 while (1)
{
    codigo
}
El 1, como cualquier número distinto de 0, significa cierto, y siempre se repetirá el bucle, pase lo que pase, EXCEPTO que haya un break, un sencillo comando que para cualquier bucle.

El tercer bucle es una variación del anterior, solo se usa para casos muy concretos. Imagina que quieres que el contenido del bucle se ejecute una vez, y si se cumple la condición, que siga ejecutándose, así es:
Código:
do
{
}
while (valor lógico)
Otro ejmplo:
Código:
int x;
do
{
    x++;
}
while (x)
Si hubiese sido un bucle while normal, nunca habría sucedido ese bucle. No damos valor a x al declararlo, y vale 0. Luego se le suma 1, y como 1 es un valor cierto, y se pide que x sea un valor cierto (que no sea 0), se cumple.

Este último, es un bucle de elección, su estructura es tan sostenible a cambios que lo mejor es ver un ejemplo directo:
Código:
int i;
switch (i)
{
    case 0: i = 5; break;
    case 5: case 10: i = 10; break;
}
No es algo fácil de entender de primeras. Asi que explicaré directamente como funciona, se toma una variable con switch, en este caso i. Después, dentro del switch metemos un código. A través de la palabra case, damos un valor que podría tomar i y partir de ahí, si coincide con el valor, el código desde ahí se ejecutará hasta acabar o encontrar un break. Se suele usar para menús, donde se introduce un número que coincide con una opción. Recuerda bien el uso del break;. Imagina que tu menú usa números del 1 al 5, si meten 1, pasa una cosa, metes 2 y otra, y así... Si pones case 1: y su código, luego case 2: y su código, y así... Si se elije 1, se ejecutará todo el código desde ahí, el del 2,3,4 y 5. Por eso debes poner break; antes de caso. Igual que es un inconveniente, es una ventaja, puedes usar para varios casos el mismo código sin tener que repetirte, como hago en el ejemplo en el caso de 5 y 10.
Si no se cumple ningún caso, switch no hará nada. Si quieres que en caso de que no se cumpla nada, haga algo, eso lo tienes que poner al final, empezado por un default:, como aquí:
Código:
int i = 2;
switch (i)
{
    case 0: i = 5; break;
    case 5: case 10: i = 10; break;
    default: i = 0;
}

HarZe
WebMaster & Desarrollador

Cantidad de envíos : 58
Fecha de inscripción : 21/06/2009
Edad : 24

Ver perfil de usuario http://opengl-esp.superforo.net

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.