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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error en ejercicio de clase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en ejercicio de clase  (Leído 3,003 veces)
foreground

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Error en ejercicio de clase
« en: 14 Octubre 2012, 14:44 pm »

Buenos días otra vez! Resulta que tengo que hacer un juego para un ejercicio de clase de Programación I y tengo un problema que no logro resolver. El juego consiste en retirar fichas de 1 en 1 de 2 en 2 o de 3 en 3, hasta llegar a 0, el programa actual es tan solo un borrador ya que si le meto valores negativos me suma fichas entre otros errores, no obstante me preocupa el echo de que una vez que retiro todas las fichas en vez decirme quedan 0 fichas el programa me genera un espacio en blanco (quedan fichas) se me ralla y me dicen que quedan -3 o -2.

El código en cuestión es:

Código
  1. #include <stdio.h>
  2. int main(){
  3. int fquitahombre,fquitamaquina,ftotales;
  4. char c;
  5. printf("Bienvenido al juego de las fichas.\n");
  6. printf("Este juego consiste en ir retirando fichas, de un total de 17, el que retire la ultima ficha pierde.\n");
  7. printf("En cada turno puedes retirar 1,2 o 3 fichas.\n");
  8. printf("Empieza el juego:\n");
  9. ftotales=17;
  10. while(ftotales>=0){
  11. printf("Retira las fichas que desees:");
  12. scanf("%d",&fquitahombre);
  13. ftotales=ftotales-fquitahombre;
  14. printf("Quedan %0.d fichas\n",ftotales);
  15. while(ftotales>0){
  16. fquitamaquina=4-fquitahombre;
  17. printf("La maquina quita %.0d\n",fquitamaquina);
  18. break;
  19. }
  20. ftotales=ftotales-fquitamaquina;
  21. printf("Quedan %0.d fichas\n",ftotales);
  22. }
  23.  
  24. printf("Has retirado la ultima ficha, por lo tanto, has perdido.");
  25. c=getchar();
  26. c=getchar();
  27. }

El error

http://s2.subirimagenes.com/imagen/8056853sin-ttulo.png


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error en ejercicio de clase
« Respuesta #1 en: 14 Octubre 2012, 16:39 pm »

He respetado en lo posible el "formato" de tu código, ya que yo lo hubiera hecho diferente. Pero bueno, tienes corregido lo de valores negativos y que el usuario no pueda entrar valores que no sean entre 1 y 3. Además no me gusta perder siempre, con lo que le he puesto una variante a la máquina:quita fichas de forma aleatoria, así puedo ganar yo. Puedes desactivar esa opción eliminando el rand y activando la otra opción:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.    int main(){
  5.    int fquitahombre=0,fquitamaquina=0,ftotales=0;
  6.    char c;
  7.    srand(time(0));
  8.    printf("Bienvenido al juego de las fichas.\n");
  9.    printf("Este juego consiste en ir retirando fichas, de un total de 17, el que retire la ultima ficha pierde.\n");
  10.    printf("En cada turno puedes retirar 1,2 o 3 fichas.\n");
  11.    printf("Empieza el juego:\n");
  12.    ftotales=17;
  13.    while(ftotales>0){
  14.        printf("Retira las fichas que desees entre 1 y 3:");
  15.        scanf("%d",&fquitahombre);
  16.        while(fquitahombre > 3  || fquitahombre < 0){
  17.        printf("Te dije entre 1 y 3:");
  18.        scanf("%d",&fquitahombre);
  19.        }
  20.        ftotales=ftotales-fquitahombre;
  21.        if (ftotales<=0)
  22.            {
  23.                printf("Quedan 0 fichas\n");
  24.                printf("Has retirado la ultima ficha, por lo tanto, has perdido.");
  25.                break;
  26.            }
  27.        /*fquitamaquina=4-fquitahombre;*/ /*<==tu opcion para perder siempre*/
  28.        fquitamaquina=1+rand() % 3 ; /*mi opcion aleatorio, para poder ganar*/
  29.        ftotales=ftotales-fquitamaquina;
  30.        if (ftotales<=0)
  31.            {
  32.                printf("Quedan 0 fichas\n");
  33.                printf("Has ganado.");
  34.                break;
  35.            }
  36.        printf("La maquina quita %.0d\n",fquitamaquina);
  37.        printf("Quedan %0.d fichas\n",ftotales);
  38.    }
  39.    c=getchar();
  40.    c=getchar();
  41.    return 0;
  42. }
  43.  


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Error en ejercicio de clase
« Respuesta #2 en: 14 Octubre 2012, 16:56 pm »

¡buenas!

De hecho el que empieza deberia de perder siempre:

Pierded el que coge la ultima. (Hay 17 fichas)
Gana el que coger la penultima. (Reducimos a 16 fichas)
Entre una jugada y la.siguente siempre se pueden suma 4 fichas
Si el segundo jugador conoce las reglas siempre cogera la 16° ficha y perdera el.que empieza.

sibquieres dar una oportunidad al que empieza añade una ficha, o aumenta a 4 el numero maximo de fichas que se puedan coger. Asi si el que empieza conoce el algoritmo para ganar podra hacerlo y sino, es mas que posible que pierda.

¡saludos!
« Última modificación: 14 Octubre 2012, 17:00 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: Error en ejercicio de clase
« Respuesta #3 en: 14 Octubre 2012, 17:07 pm »

En realidad se puede ganar sin que saque random pero depende de la cantidad de fichas que hay en total, si se puede sacar de 3 fichas hay que tratar de obtener la ventaja de ganar.
Si queda 1, perdemos.
Si quedan 5 tambien perdemos. Entonces es ciclico, hay una lista de valores con la que si caemos obtendremos la desventaja los cuales son:
vector[0] = 1;
vector = vector[i-1] + 4;
1 5 9 13 17 20 24 28  y asi susesivamente.
Si el oponente cae en algunos de esos numeros de la desventaja siempre hay que tratar de descontar 4 fichas para que siga en ese vector de desventajas.
Ponele que las fichas que quedan son 17 y le toca sacar a el.
El saca 3 por lo que 17-3 = 14. Te toca tu turno y tendrias que sacar 1 para que el vuelva a caer en esa lista de desventaja. Entonces 14-1 = 13 y le vuelve a tocar su turno.
« Última modificación: 14 Octubre 2012, 17:16 pm por bemone » En línea

Odio los tipos de variable de Windows.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error en declaración de clase :s
Java
jclaurian 2 3,912 Último mensaje 22 Marzo 2008, 18:57 pm
por jclaurian
Error con clase PHPMailer
PHP
Feedeex 2 7,087 Último mensaje 3 Enero 2011, 15:11 pm
por AFelipeTrujillo
Duda con ejercicio de clase
Programación C/C++
foreground 6 3,656 Último mensaje 1 Octubre 2012, 07:02 am
por Caster
Problema con ejercicio de separar interfaz de implementación de una clase
Programación C/C++
Mordecai 1 2,581 Último mensaje 14 Septiembre 2013, 04:49 am
por erest0r
Ayuda ejercicio clase c++
Programación C/C++
LeoHom 4 3,415 Último mensaje 6 Diciembre 2021, 19:25 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines