lunes, 12 de junio de 2017

C, 23. Sentencia while


/* La sentencia while

    Sintaxis:

        while(condicion){
            instrucciones;
    } */

// Mostrar los diez primeros números enteros positivos en pantalla en orden ascendente

#include<stdio.h>

int main(){
    int i;

    i=1;                   // A partir de valor 1

    while(i<=10){          // y mientras la variable sea menor o igual a 10
        printf("%i ",i);   // imprimira el valor de la variable
        i++;               // incrementará en 1 su valor en cada iteracion.
    }

    return 0;
}

En el primer ejemplo el programa ya dispone de las variables ya que inicializamos en 1 y le solicitamos al bucle que compruebe la variable cada vez que haga un incremento hasta que llegue a 10. En este caso no se requiere acción por parte el usuario.

En el siguiente ejemplo, en cambio, es el usuario el que ha de proporcionar el valor de los dos números para los cuales va a mostrar todos los enteros que se comprendan entre ellos ambos inclusive; si deseamos que aparezcan en orden ascendente debemos considerar que los incrementos han de ser positivos desde el menor de los números proporcionados, y en descendente el programa deberá hacer decrementos desde el mayor de ambos. El programa dará error si lo los inroducimos en el orden adecuado.

// Mostrar una serie entre dos numeros, ambos inclusive, en
// orden ascendente/descendente.

#include<stdio.h>

int main(){

    int n1,n2;

    printf("Introduzca el primer y el ultimo valor de la serie:\n");
    scanf("%i",&n1);
    scanf("%i",&n2);

    while(n1<=n2){           // Para obtenerlo en orden ascendente
        printf("%i\n",n1);   // mostramos el valor menor
        n1++;                // y le vamos sumando 1 (incremento).
    }

    //while(n2>=n1){         // Para obtenerlo en orden descendente
    //    printf("%i\n",n2); // mostramos el valor mayor
    //    n2--;              // y le vamos restando 1 (decremento).
    //}

    return 0;
}

Siendo más específicos y para evitar errores, si deseamos que aparezcan del primero al segundo de forma estricta, independientemente de si el primero es mayor o menos que el segundo, el programa deberá poder discernir entre ambos, por lo que vamos a introducir primero if-else y después while.

// Mostrar una serie entre dos numeros, ambos inclusive,
// en el orden en que hayan sido introducidos por el usuario.

#include<stdio.h>

int main(){

    int n1,n2;

    printf("Por favor, introduzca el primer y el ultimo valor de la serie:\n");
    scanf("%i %i",&n1,&n2);

    if(n1<n2){                   // De este modo, al ser el primer numero
        while(n1<=n2){           // el menor, apareceran en orden ascendente.
            printf("%i\n",n1);
            n1++;
        }
    }

    // if(n1>n2){                // Lo correcto es incluir la segunda opcion
    //    while(n1>=n2){         // bajo un else, pero de este modo podemos
    //        printf("%i\n",n1); // ver claro que es el supuesto de el 1er
    //        n1--;              // numero mayor que el 2do.
    //    }
    //}

    else{                        // El primero es el mayor, ergo apareceran
        while(n1>=n2){           // en orden descendente.
            printf("%i\n",n1);
            n1--;
        }
    }
    return 0;
}