• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

[Introducción al lenguaje de programación C] Bucle While (Capítulo VII)

Neur0na2

Timing Attack!
Registrado
13 Feb 2016
Mensajes
115
Puntos
0
Una vez visto los condicionales pasamos a los bucles. Un bucle es una sentencia que nos permite repetir un cierto bloque de código dependiendo de una cierta condición, o bien de un cierto número de veces. La mejor manera de entenderlos una vez visto los ejemplos, es ir practicando, de lo contrario es posible que os resulte más complicado de entender.

Como vamos a trabajar con más operadores, os vuelvo a poner la lista del capítulo anterior para que os vaya quedando claro:

  • < -> Menor que.
  • > -> Mayor que.
  • == -> Igual que.
  • <= -> Menor o igual que.
  • >= -> Mayor o igual que.
  • % -> Módulo.
  • ++ -> Incremento.
  • -- -> Decremento.
  • ! -> Niega una expresión. Si la expresión es verdadera la hace falsa y viceversa.
  • != -> Distinto que.
  • && (AND) -> Solo verdadero si ambas expresiones son verdaderas.
  • || (OR) -> Solo es falso si ambas expresiones son falsas.

Primero comenzaremos por el bucle while, que repite el bloque de código que indiquemos constantemente hasta que se cumpla una determinada condición.

Para entenderlo mejor, supongamos que tenemos el siguiente código:

Código:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int maximo;
    int i = 0;
    
    printf("Introduce el máximo: ");
    scanf("%d", &maximo);
    
    while(i <= maximo)
        printf("%d", i);
    
    getch();
    return 0;
}

Si alguien ha ejecutado este código se puede encontrar con una aplicación que no finaliza automáticamente, es decir, tenemos que meterlo manualmente, Ctrl-C para ello. A esto se le denomina bucle infinito. Vamos a explicar cómo ha sucedido esto. Para ello vayamos directamente al bucle:

Código:
while(i <= maximo)
    printf("%d", i);

Primero decir que aquí ocurre lo mismo que con if, si el bucle while no engloba más de una sentencia no es necesario poner llaves, de lo contrario sí habrá que ponerlas.

Tenemos dos variables, la primera que se le asignará el valor que nosotros introduzcamos por teclado y la segunda que tiene un valor de 0. En el bucle while decimos que si la segunda variable es menor o igual que el número que introduzcamos por teclado, nos imprimirá en pantalla el valor de la segunda variable. Si probáis con los números positivos os encontraréis con que el programa no finaliza y es debido a que el valor de i siempre es 0, no aumenta, por lo que si la variable i es igual o menor que el número que introduzcamos siempre se repite el código porque la condición siempre es cierta.

Esto se soluciona aumentando el valor de i cada vez que se ejecute el bucle. Veamos como hacerlo:

Código:
while(i <= maximo)
{
     printf("%d", i);
     i++;
}

Ahora la condición while tiene más de una sentencia por lo que habrá que ponerla entre llaves, de lo contrario no se estaría aplicando el i++.

Preguntaréis, ¿qué puñetas es eso de i++? Pues i++ es una abreviación de i = i + 1, es decir aumentamos una unidad el valor de la variable i cada vez que se ejecute el bucle. Lógicamente, en caso contrario, i-- sería una abreviación de i = i - 1.

Si ahora introducimos como valor máximo el 0, veremos que el bucle se repite una vez debido a que la condición es cierta, pero a la siguiente vez i vale 1, ya que hemos aumentado el valor de la variable, por lo que imprime ese 1 en pantalla tal y como estamos indicando y la aplicación se detiene automáticamente debido a que la condición ya no es cierta.

Sé que para algunas personas les puede resultar algo complicado, por lo que como he dicho nada más empezar el capítulo, crear un ejemplo vosotros mismos y lo veréis más fácilmente.

Vamos a complicar un poco el código, para ello utilizaremos el condicional if, más operadores que os dejé al principio del capítulo y el bucle while:

Código:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int numero;
    
    printf("Introduce un número: ");
    scanf("%d", &numero);
    printf("\n");
    
    if(numero < 7)
        printf("El número es menor que 7\n");
    
    if(numero > 3)
        printf("El número es mayor que 3\n");
    
    if(numero != 5)
        printf("No es el número 5 \n");
    
    if((numero % 3 == 0) && (numero > 20))
        printf("El número es divisible por 3 y es mayor que 20\n");
    
    if(!(numero == 6) && (numero < 10))
        printf("No es el número 6 y es menor que 10\n");
    
    if(!(numero % 2 == 0) && (numero > 10))
        printf("El número es impar y mayor que 10\n");

    if ((numero % 5 == 0) || (numero <= 100))
        printf("El número es múltiplo de 5 o es menor o igual que 100\n");
    
    while(numero >= 0)
        printf("%d", numero--);
    
    getch();
    return 0;
}

Solo desmenuzo el bucle while, ya que los printf ya están indicando lo que realiza cada condición.

Código:
while(numero >= 0)
    printf("%d", numero--);

Esto es una cuenta a la inversa, es decir, va del número introducido al 0. Si el número que introducimos es mayor o igual que 0, lo imprimimos en pantalla pero restándole una unidad cada vez que se ejecute el bucle. Por ejemplo si introducimos el número 4, imprimirá 4 3 2 1 0. Si os habéis fijado bien lo hemos hecho desde una sola sentencia.

Bueno, pues ya se puede decir que hemos empezado con C de verdad, ahora solo os queda practicar. Cualquier duda abajo en los comentarios.

Espero que os haya gustado :eek:k:

Capítulo anterior
Capítulo siguiente
 
Última edición:
Arriba