Título: Programa para la adivinación de un numero. Publicado por: gortes 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"); } } Título: Re: Programa para la adivinación de un numero. Publicado por: 0xDani en 18 Octubre 2012, 12:22 pm Usa etiquetas GeSHi para el codigo, asi es ilegible.
Título: Re: Programa para la adivinación de un numero. Publicado por: za.asi 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); Título: Re: Programa para la adivinación de un numero. Publicado por: SokarTefnut 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; Título: Re: Programa para la adivinación de un numero. Publicado por: za.asi 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
|