elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa para la adivinación de un numero.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa para la adivinación de un numero.  (Leído 3,960 veces)
gortes

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Programa para la adivinación de un numero.
« en: 18 Octubre 2012, 01:38 am »

Como asignatura del colegio tuve que hacer un juego, en el que la computadora eligiera un numero aleatorio entre un rango de limites que el usuario introduzca; y solo deja al usuario intentar adivinar el numero de veces que el diga...
Cada vez que introduces el valor para ver si acertaste, te debe decir si es correcto o incorrecto, y te debe decir el numero de intento en el que estás y cuantos intentos te quedan.
Al final te debe decir todos los intentos que escribiste, y el numero que la computadora eligió aleatoriamente...

En fín... tengo problemas, debido a que el programa no imprime bien el numero de intentos que quedan, y no aparecen todos los intentos hasta el final, y no se porque... ¿Alguien me podría auxiliar?
El programa compila y corre bien, solo es ese el problema... los intentos.... que los hice a través de un arreglo...

El código completo es el siguiente:

#include<stdio.h>

void MuestraDatos();
void MuestraObjetivos();
void PideDatos(int*NumIntentos, int*NumLimMaximo, int*NumLimMinimo);
void NumAzar(int NumLimMaximo, int NumLimMinimo, int*NumRand);
void Juego(int NumRand, int*NumPuesto, int NumIntentos, int NumLimiteMaximo, int NumLimiteMinimo, int Arreglo[200], int*a, int*i);
void Imprime(int NumRand, int NumIntentos, int NumPuesto, int Arreglo[200], int a, int i);


/*-------------------------------------------------------------------------------------*/
void main(void)
{

int Rand, Puesto, Intentos, LimMaximo, LimMinimo, Lista[200], a, i;

MuestraDatos();
MuestraObjetivos();
PideDatos(&Intentos, &LimMaximo, &LimMinimo);
NumAzar(LimMaximo, LimMinimo, &Rand);
Juego(Rand, &Puesto, Intentos, LimMaximo, LimMinimo, Lista, &a, &i);
Imprime(Rand, Intentos, Puesto, Lista, a, i);
}



/*-------------------------------------------------------------------------------------*/
void MuestraDatos()
{
printf("El Juego que está a punto de disfrutar, fue diseñado por Gortes Tarets,\n");
printf("estudiante de Ingeniería Industrial en la UNAM.\n");
printf("Press Enter to Continue\n");
while(getchar()!='\n');
}



/*-------------------------------------------------------------------------------------*/
void MuestraObjetivos()
{
printf("\n\n");
printf("----------------ADIVINA EL NUMERO------------------\n");
printf("Los Objetivos del juego son los siguientes:\n\n");
printf("1. Introducirás los limites dentro de los cuales estará el numero a adivinar\n");
printf("2. Introducirás el numero de intentos en el que crees descubrirlo\n");
printf("3. Yo generaré el número, y tu lo intentarás descubrir en tu numero de intentos\n");
printf("4. El objetivo principal del juego es que ENCUENTRES EL NÚMERO!\n");
printf("Press Enter to Continue\n");
while(getchar()!='\n');
}



/*-------------------------------------------------------------------------------------*/
void PideDatos(int*NumIntentos, int*NumLimMaximo, int*NumLimMinimo)
{

printf("\n\n");
printf("Introduce el Limite máximo para los valores\n");
scanf("%d", NumLimMaximo);
if(*NumLimMaximo==0)
{
do
{
printf("Obviamente este valor no puede ser 0. Introduce un nuevo valor:\n");
scanf("%d", NumLimMaximo);
}
while(*NumLimMaximo==0);
}



printf("Introduce el Limite mínimo para los valores\n");
scanf("%d", NumLimMinimo);
if(*NumLimMinimo>=*NumLimMaximo)
{
do
{
printf("Obviamente este valor no puede ser mayor al limite maximo. Introduce un nuevo valor:\n");
scanf("%d", NumLimMinimo);
}
while(*NumLimMinimo==0);
}


printf("En cuantos intentos crees encontrar el número\n");
scanf("%d", NumIntentos);
if(*NumIntentos==0)
{
do
{
printf("Obviamente este valor no puede ser 0. Introduce un nuevo valor:\n");
scanf("%d", NumIntentos);
}
while(*NumIntentos==0);
}
}


/*-------------------------------------------------------------------------------------*/
void NumAzar(int NumLimMaximo, int NumLimMinimo, int*NumRand)
{
int NumLimiteTotal, rand();

NumLimiteTotal=(NumLimMaximo-NumLimMinimo);
*NumRand=rand()%(NumLimiteTotal)+(NumLimMinimo);
}



/*-------------------------------------------------------------------------------------*/
void Juego(int NumRand, int*NumPuesto, int NumIntentos, int NumLimiteMaximo, int NumLimiteMinimo, int Arreglo[200], int*a, int*i)
{
*a=0;
*i=NumIntentos;

printf("Estoy listo para jugar...\n\n");

do
{
printf("Introduce tu adivinación:\n");
scanf("%d", NumPuesto);
Arreglo[*a]=*NumPuesto;
*a++;

if((*NumPuesto<NumLimiteMinimo)||(*NumPuesto>NumLimiteMaximo))
{
printf("Los valores están fuera de Rango... intenta de nuevo");
i--;
printf("Quedan %d intentos\n", *i);
}

else if(*NumPuesto==NumRand)
{
printf("Felicidades, Le has ganado a una computadora... Respekt+\n");
i=i;
printf("Lo lograste en %d intentos\n\n\n", *a);
}

else if(*NumPuesto!=NumRand)
{
printf("Uy, no!, ese no era el número, intentalo de nuevo... Respect-\n");
i--;
printf("Quedan %d intentos\n", *i);
}
}
while(*i!=NumIntentos);
}



/*-------------------------------------------------------------------------------------*/
void Imprime(int NumRand, int NumIntentos, int NumPuesto, int Arreglo[200], int a, int i)
{
int contador=0;

if((NumPuesto)==(NumRand))
{
printf("-------------------RESULTADOS-------------------\n");
printf("Lo lograste resolver en %d intentos\n", a);
printf("El número correcto era: %d\n", NumRand);
printf("Tus intentos fueron:\n");
for(contador=0; contador=a; contador+1)
{
printf("Intento #%d: %d\n\n", contador++, Arreglo[contador]);
}
printf("Muchas Gracias por jugar mi juego");
}

else if(NumPuesto!=NumRand)
{
printf("-------------------RESULTADOS-------------------\n");
printf("No lograste encontrar el número en %d intentos, sos un looser!\n", a);
printf("El número correcto era: %d\n", NumRand);
printf("Tus intentos fueron:\n");
for(contador=0; contador=a; contador++)
{
printf("Intento #%d: %d\n\n", contador++, Arreglo[contador]);
}
printf("Muchas Gracias por jugar mi juego");
}
}


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Programa para la adivinación de un numero.
« Respuesta #1 en: 18 Octubre 2012, 12:22 pm »

Usa etiquetas GeSHi para el codigo, asi es ilegible.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Programa para la adivinación de un numero.
« Respuesta #2 en: 19 Octubre 2012, 20:06 pm »

Justo antes del while deberias poner *i-=; y hacer que el bucle sea cuando los intentos restantes no sean 0.

Te quedaría así:
Código:
printf("Quedan %d intentos\n", *i); 
i-=;
}
}
while(*i!=0);
En línea

SokarTefnut

Desconectado Desconectado

Mensajes: 124



Ver Perfil
Re: Programa para la adivinación de un numero.
« Respuesta #3 en: 20 Octubre 2012, 17:21 pm »

Creo que estas mezclando aritmética de punteros con arimética de variables.

El la funcion Juego:

*i=NumIntentos;  // i es un puntero a la variable
si haces i--, no estás decrementando la variable,sino la direccion apuntada
por eso aparecen esos valores al imprimir los intentos, son direcciones de memoria ajenas a la variable i.

Se podría usar una variable temporal en la funcion juego, de la siguiente manera:

Juego(.........)
{
int temp;
temp=NumIntentos;

.......

ahora podremos decrementar temp,
temp--;
al salir del bucle podemos asignar el valor de temp a la variable i
*i=temp;

En línea

"Saber romper medidas de seguridad no hace que seas hacker, al igual que saber hacer un puente en un coche no te convierte en un ingeniero de automoción"
-- Eric Raymond -- http://en.wikipedia.org/wiki/Eric_S._Raymond
za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Programa para la adivinación de un numero.
« Respuesta #4 en: 21 Octubre 2012, 13:56 pm »

No me habia dado cuenta, tienes razón. Es que solo hace un mes que he empezado con la programación y lo hago todo de manera autodidacta, de manera que aún cometo muchos fallos graves, pero así se aprende, buscado nuevas salidas y aprendiendo de los errores  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines