Este es el blog que usamos como portafolios para mostrar los proyectos que hacemos en nuestro centro dentro del proyecto general CITE STEAM

viernes, 17 de abril de 2020

Programa para adivinar un número dentro en un rango determinado


Seguimos avanzando en la programación con un nuevo bucle, el do/while. Así, en esta ocasión nos propusimos realizar un programa que generara un número aleatorio para luego pedir al usuario que lo adivine. Se puede generar dentro de cualquier rango. Nuestro rango será de 1 a 100.

Veamos la solución:

/*Incluimos 3 librerías: la primera, necesaria para todo programa en C y las otras dos son requeridas para genera el número aleatorio*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    /*Declaramos una serie de variables: número (cifra que introduce el usuario), adivina (número aleatorio que genera el programa) y arriba y abajo, que almacenan el número mas alto y bajo que hasta el momento ha introducido el usuario y que proporciona información para que sea mas llevadero el acordarse del rango en el cual voy "acorralando" al número*/
    int numero, adivina, intentos=0, arriba=100, abajo=1;
    
   /*Sin la sentencia srand siempre se generaría el mismo número en  distintas ejecuciones del programa.
    srand(time(NULL));
    
    //Generamos el número entre 1 y 100
   adivina=rand()%100+1;
  
    //El bucle principal se romperá cuando el usuario adivine el número generado
    do
    {
        //Obligamos al usuario a introducir un número entre el rango en el cual está el número a adivinar. En un primer momento (inicializado en la línea de declaraciones) será 1 y 100.
        do
        {
            printf("\nDame un numero entre %d y %d ", abajo, arriba);
            scanf("%d", &numero);          
        }while(numero<abajo || numero>arriba);    //obliga al intervalo
      
        //Si el número introducido es mayor que el generado, mostramos la información en pantalla y actualizamos el límite superior del rango
        if(numero > adivina)
        {
            printf("\nEl numero que he pensado es menor");
            arriba=numero;
            printf("\nEl numero esta entre %d y %d", abajo, arriba);
        }
        else
        {
             //Si el número introducido es menor que el generado, mostramos la información en pantalla y actualizamos el límite inferior del rango
             if(numero < adivina)
             {
                 printf("\nEl numero que he pensado es mayor");
                abajo=numero;
                printf("\nEl numero esta entre %d y %d", abajo, arriba);          
            }
        }
        //Incrementamos el número de intentos que el usuario ha realizado hasta el momento y mostramos esa información en la pantalla
        intentos++;
        printf("\nLlevas %d intentos", intentos);
       
    }while(numero!=adivina);  //Mientras el número generado y el introducido por el usuario no coincidan, se repetirá el bucle.
   
    //Si la ejecución del programa llega a este punto, es que se ha roto el bucle, por consiguiente el número introducido coincide con el número generado. Damos la enhorabuena.
    printf("\nEnhorabuena, lo has acertado. Era el número %d", adivina);    

  
    return 1;
}

Así, tenemos un programa muy divertido y que no ha resultado demasiado difícil. Lo más complicado fue incorporar las variables "arriba" y "abajo" y el valor que iban almacenando, el sitio exacto donde había que realizarlo. Al final, no hubo problema y el programa se terminó de forma exitosa por tod@s.

Evidentemente, si queremos hacer más complicada la búsqueda del número generado al usuario, simplemente cambiaríamos el "100" en la sentencia 

adivina=rand()%100+1;


por una cifra mayor.

De momento es todo. Esperemos que podamos seguir aportando información interesante

Saludos a tod@s.