Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo3.0 en 7 Julio 2012, 23:47 pm



Título: Cambiar un Switch por un do-while
Publicado por: anonimo3.0 en 7 Julio 2012, 23:47 pm
  Necesito cambiar este switch a un if-else do-while o for si que se puede xD, pero de ninguna forma me a resultado, alguna sugerencia?
Aqui esta el codigo completo...
  http://www.mediafire.com/?kdyjq36v5z62f9y (http://www.mediafire.com/?kdyjq36v5z62f9y)
PD: esta en C (solito).

Código
  1. while(fin_juego != 0){
  2.        if (jugador == ficha_c){
  3.            printf ( "Turno del Computador\n" ) ;
  4.            jugada_ok = 1;
  5.            while (jugada_ok != 0){
  6.                jugada = rand()%9 +1;
  7.                switch ( jugada) {
  8.                    case 1:    if (t1 == 9){
  9.                        t1 = jugador; jugada_ok = 0;
  10.                            }
  11.                            break;
  12.                    case 2: if (t2 == 9){
  13.                                t2 = jugador;
  14.                                jugada_ok = 0;
  15.                            }
  16.                            break;
  17.                    case 3: if (t3 == 9){
  18.                                t3 = jugador;
  19.                                jugada_ok = 0;
  20.                            }
  21.                            break;
  22.                    case 4:    if (t4 == 9){
  23.                                t4 = jugador;
  24.                                jugada_ok = 0;
  25.                            }
  26.                            break;
  27.                    case 5:    if (t5 == 9){
  28.                                t5 = jugador;
  29.                                jugada_ok = 0;
  30.                            }
  31.                            break;
  32.                    case 6:    if (t6 == 9){
  33.                                t6 = jugador;
  34.                                jugada_ok = 0;
  35.                            }
  36.                            break;
  37.                    case 7:    if (t7 == 9){
  38.                                t7 = jugador;
  39.                                jugada_ok = 0;
  40.                            }
  41.                            break;
  42.                    case 8:    if (t8 == 9){
  43.                                t8 = jugador;
  44.                                jugada_ok = 0;
  45.                            }
  46.                            break;
  47.                    case 9:    if (t9 == 9){
  48.                                t9 = jugador;
  49.                                jugada_ok = 0;
  50.                            }
  51.                            break;
  52.                }
  53.            }


Título: Re: Cambiar un Switch por un do-while
Publicado por: DickGumshoe en 8 Julio 2012, 00:03 am
No he mirado el resto del código, pero para sustituir el switch por los if, sería así:

Código
  1. while(fin_juego != 0){
  2.        if (jugador == ficha_c){
  3.            printf ( "Turno del Computador\n" ) ;
  4.            jugada_ok = 1;
  5.            while (jugada_ok != 0){
  6.                jugada = rand()%9 +1;
  7.  
  8.                    if(jugada==1)
  9.                    {
  10.                        if (t1 == 9){
  11.                        t1 = jugador; jugada_ok = 0;
  12.                        }
  13.                    }  
  14.  
  15.                    else if(jugada == 2)
  16.                    {
  17.                        if (t2 == 9){
  18.                                t2 = jugador;
  19.                                jugada_ok = 0;
  20.                            }
  21.                    }
  22.  
  23.                    else if(jugada == 3)
  24.                    {
  25.                        if (t3 == 9){
  26.                                t3 = jugador;
  27.                                jugada_ok = 0;
  28.                            }
  29.                    }
  30.  
  31.                   else if(jugada == 4)  
  32.                   {
  33.                       if (t4 == 9){
  34.                                t4 = jugador;
  35.                                jugada_ok = 0;
  36.                            }
  37.                   }
  38.  
  39.  
  40.                    else if(jugada == 5)
  41.                    {
  42.                         if (t5 == 9){
  43.                                t5 = jugador;
  44.                                jugada_ok = 0;
  45.                            }
  46.                    }
  47.  
  48.  
  49.                   else  if(jugada == 6)  
  50.                    {
  51.                        if (t6 == 9){
  52.                                t6 = jugador;
  53.                                jugada_ok = 0;
  54.                            }
  55.                    }
  56.                   else if(jugada == 7)
  57.                    {
  58.                        if (t7 == 9){
  59.                                t7 = jugador;
  60.                                jugada_ok = 0;
  61.                            }
  62.                    }
  63.                   else if(jugada == 8)
  64.                    {
  65.                         if (t8 == 9){
  66.                                t8 = jugador;
  67.                                jugada_ok = 0;
  68.                            }
  69.                    }
  70.  
  71.                  else if(jugada == 9)
  72.                   {
  73.                       if (t9 == 9){
  74.                                t9 = jugador;
  75.                                jugada_ok = 0;
  76.                        }
  77.                     }  
  78.                }

Saludos.


Título: Re: Cambiar un Switch por un do-while
Publicado por: anonimo3.0 en 8 Julio 2012, 00:29 am
No funciona, cae en un ciclo repetitivo  :o me pide que ingrese el numero de casilla todo el tiempo, pero sin hacer nada




Título: Re: Cambiar un Switch por un do-while
Publicado por: DickGumshoe en 8 Julio 2012, 00:34 am
¿Lo has colocado bien dentro del código? Ese if-else, que yo sepa, es el equivalente al switch...

Quizá esté confundido... Seguiré mirando y ahora te digo.

Saludos!


Título: Re: Cambiar un Switch por un do-while
Publicado por: anonimo3.0 en 8 Julio 2012, 00:39 am
  No lo copie y pegue porque le tengo otras variables xD, asi que no creo que sea eso

Código
  1. while(fin_juego != 0){
  2.        if (jugador == computador) {
  3.            printf ( "Turno del Computador\n" ) ;
  4.            jugada_ok = 1;
  5.            while (jugada_ok != 0){
  6.                srand(time(NULL));
  7.                jugada = rand()%9 +1;
  8.                   if(jugada==1) {
  9.                    if (n1 == 9){
  10.                      n1 = jugador;
  11.                      jugada_ok = 0; }
  12.                   }
  13.                   else if(jugada==2) {
  14.                    if (n2 == 9){
  15.                        n2 = jugador;
  16.                        jugada_ok = 0; }
  17.                     }
  18.                   else if(jugada==3) {
  19.                    if (n3 == 9){
  20.                        n3 = jugador;
  21.                        jugada_ok = 0; }
  22.                      }
  23.                   else if(jugada==4) {
  24.                    if (n4 == 9){
  25.                        n4 = jugador;
  26.                        jugada_ok = 0; }
  27.                       }
  28.                   else if(jugada==5) {
  29.                    if (n5 == 9){
  30.                        n5 = jugador;
  31.                        jugada_ok = 0; }
  32.                        }
  33.                   else if(jugada==6) {
  34.                    if (n6 == 9){
  35.                        n6 = jugador;
  36.                        jugada_ok = 0; }
  37.                        }
  38.                   else if(jugada==7) {
  39.                    if (n7 == 9){
  40.                        n7 = jugador;
  41.                        jugada_ok = 0; }
  42.                        }
  43.                   else if(jugada==8) {
  44.                    if (n8 == 9){
  45.                        n8 = jugador;
  46.                        jugada_ok = 0; }
  47.                        }
  48.                   else if(jugada==9) {
  49.                    if (n9 == 9){
  50.                        n9 = jugador;
  51.                        jugada_ok = 0; }
  52.                        }
  53.            }


Título: Re: Cambiar un Switch por un do-while
Publicado por: DickGumshoe en 8 Julio 2012, 00:43 am
No, me he confundido... Seguiré mirando, pero CREO (no me gusta asegurar las cosas), que era el primer código que te pasé...

Cuando llegue a alguna conclusión te digo.

Saludos!


Título: Re: Cambiar un Switch por un do-while
Publicado por: Khronos14 en 8 Julio 2012, 00:48 am
anonimo3.0, tienes mal planteado el algoritmo. Yo lo que haría sería un array y quedaría algo como esto:

Código
  1. while(fin_juego != 0){
  2.        if (jugador == ficha_c){
  3.            printf ( "Turno del Computador\n" ) ;
  4.            jugada_ok = 1;
  5.            while (jugada_ok != 0)
  6. {
  7.                jugada = rand() % 9;
  8. if (t[jugada] == 9){
  9. t[jugada] = jugador;
  10. jugada_ok = 0;
  11. }
  12. }          
  13.            }
  14. }
  15.  

Más simple, ¿verdad?

Lo que no entiendo es para que haces el bucle while de jugada_ok...

Saludos.


Título: Re: Cambiar un Switch por un do-while
Publicado por: DickGumshoe en 8 Julio 2012, 00:52 am
Quizá sea del algoritmo como dice Khronos14... Como preguntabas por pasar de switch a if-else, creía que dabas a entender que el algoritmo estaba bien planteado y no lo miré...


Título: Re: Cambiar un Switch por un do-while
Publicado por: anonimo3.0 en 8 Julio 2012, 00:57 am
anonimo3.0, tienes mal planteado el algoritmo. Yo lo que haría sería un array y quedaría algo como esto:

Código
  1. while(fin_juego != 0){
  2.        if (jugador == ficha_c){
  3.            printf ( "Turno del Computador\n" ) ;
  4.            jugada_ok = 1;
  5.            while (jugada_ok != 0)
  6. {
  7.                jugada = rand() % 9;
  8. if (t[jugada] == 9){
  9. t[jugada] = jugador;
  10. jugada_ok = 0;
  11. }
  12. }          
  13.            }
  14. }
  15.  

Más simple, ¿verdad?

Lo que no entiendo es para que haces el bucle while de jugada_ok...

Saludos.



  jugada_ok  se supone que funciona de interruptor entre los distintos casos...la cosa es que no me permiten usar switch :( , y donde meto los if en ese algoritmo?


Título: Re: Cambiar un Switch por un do-while
Publicado por: 0xDani en 8 Julio 2012, 13:23 pm
No he leido el codigo, pero segun he entendido quieres hacer lo que haria un switch sin hacer un switch. Ademas los casos son 1, 2, 3, 4, 5, 6, ,7 ,8 y 9. Puedes hacer un bucle for para recorrer los casos del 1 al 9, y si el numero es igual haces lo que sea que quieras hacer y pones una sentencia break.

Saludos.

PD: ¿Porque metes srand(time(NULL)) en el while?


Título: Re: Cambiar un Switch por un do-while
Publicado por: anonimo3.0 en 8 Julio 2012, 20:18 pm
No he leido el codigo, pero segun he entendido quieres hacer lo que haria un switch sin hacer un switch. Ademas los casos son 1, 2, 3, 4, 5, 6, ,7 ,8 y 9. Puedes hacer un bucle for para recorrer los casos del 1 al 9, y si el numero es igual haces lo que sea que quieras hacer y pones una sentencia break.

Saludos.

PD: ¿Porque metes srand(time(NULL)) en el while?


  Vaya! no sabia que se podía usar break sin el switch, jajaja siempre se aprende algo nuevo..
                                                                       
                                                                              //Gracias a todos por responder//  ;-)