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;
#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));
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;
}
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.
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.