Test Foro de elhacker.net SMF 2.1

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).

while(fin_juego != 0){
        if (jugador == ficha_c){
            printf ( "Turno del Computador\n" ) ;
            jugada_ok = 1;
            while (jugada_ok != 0){
                jugada = rand()%9 +1;
                switch ( jugada) {
                    case 1:    if (t1 == 9){
                        t1 = jugador; jugada_ok = 0;
                            }
                            break;
                    case 2: if (t2 == 9){
                                t2 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 3: if (t3 == 9){
                                t3 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 4:    if (t4 == 9){
                                t4 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 5:    if (t5 == 9){
                                t5 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 6:    if (t6 == 9){
                                t6 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 7:    if (t7 == 9){
                                t7 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 8:    if (t8 == 9){
                                t8 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                    case 9:    if (t9 == 9){
                                t9 = jugador;
                                jugada_ok = 0;
                            }
                            break;
                }
            }
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í:

while(fin_juego != 0){
        if (jugador == ficha_c){
            printf ( "Turno del Computador\n" ) ;
            jugada_ok = 1;
            while (jugada_ok != 0){
                jugada = rand()%9 +1;
               
                    if(jugada==1)
                    {
                        if (t1 == 9){
                        t1 = jugador; jugada_ok = 0;
                        }
                    } 
                           
                    else if(jugada == 2)
                    {
                        if (t2 == 9){
                                t2 = jugador;
                                jugada_ok = 0;
                            }
                    }
                           
                    else if(jugada == 3)
                    {
                        if (t3 == 9){
                                t3 = jugador;
                                jugada_ok = 0;
                            }
                    }
                           
                   else if(jugada == 4) 
                   {
                       if (t4 == 9){
                                t4 = jugador;
                                jugada_ok = 0;
                            }
                   }
                   
                           
                    else if(jugada == 5)
                    {
                         if (t5 == 9){
                                t5 = jugador;
                                jugada_ok = 0;
                            }
                    }
                   
                           
                   else  if(jugada == 6) 
                    {
                        if (t6 == 9){
                                t6 = jugador;
                                jugada_ok = 0;
                            }
                    }
                   else if(jugada == 7)
                    {
                        if (t7 == 9){
                                t7 = jugador;
                                jugada_ok = 0;
                            }
                    }
                   else if(jugada == 8)
                    {
                         if (t8 == 9){
                                t8 = jugador;
                                jugada_ok = 0;
                            }
                    }
                   
                  else if(jugada == 9)
                   {
                       if (t9 == 9){
                                t9 = jugador;
                                jugada_ok = 0;
                        }
                     }   
                }


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

while(fin_juego != 0){
        if (jugador == computador) {
            printf ( "Turno del Computador\n" ) ;
            jugada_ok = 1;
            while (jugada_ok != 0){
                srand(time(NULL));
                jugada = rand()%9 +1;
                   if(jugada==1) {
                    if (n1 == 9){
                      n1 = jugador;
                      jugada_ok = 0; }
                   }
                   else if(jugada==2) {
                    if (n2 == 9){
                        n2 = jugador;
                        jugada_ok = 0; }
                     }
                   else if(jugada==3) {
                    if (n3 == 9){
                        n3 = jugador;
                        jugada_ok = 0; }
                      }
                   else if(jugada==4) {
                    if (n4 == 9){
                        n4 = jugador;
                        jugada_ok = 0; }
                       }
                   else if(jugada==5) {
                    if (n5 == 9){
                        n5 = jugador;
                        jugada_ok = 0; }
                        }
                   else if(jugada==6) {
                    if (n6 == 9){
                        n6 = jugador;
                        jugada_ok = 0; }
                        }
                   else if(jugada==7) {
                    if (n7 == 9){
                        n7 = jugador;
                        jugada_ok = 0; }
                        }
                   else if(jugada==8) {
                    if (n8 == 9){
                        n8 = jugador;
                        jugada_ok = 0; }
                        }
                   else if(jugada==9) {
                    if (n9 == 9){
                        n9 = jugador;
                        jugada_ok = 0; }
                        }
            }
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:


while(fin_juego != 0){
        if (jugador == ficha_c){
            printf ( "Turno del Computador\n" ) ;
            jugada_ok = 1;
            while (jugada_ok != 0)
{
                jugada = rand() % 9;
if (t[jugada] == 9){
t[jugada] = jugador;
jugada_ok = 0;
}
}           
            }
}


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
Cita de: 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:


while(fin_juego != 0){
        if (jugador == ficha_c){
            printf ( "Turno del Computador\n" ) ;
            jugada_ok = 1;
            while (jugada_ok != 0)
{
                jugada = rand() % 9;
if (t[jugada] == 9){
t[jugada] = jugador;
jugada_ok = 0;
}
}           
            }
}


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
Cita de: daniyo 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?


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