Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/06/2014, 17:55
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Problema extraño al intentar randomizar una cola

Hola amigos:

Llevo años programando pero vengo de otros lenguajes y aqui tengo algun problemita que ya me tiene aburrido

Basicamente es conceptual..... intento mezclar una "cola" que tiene cartas con una idea que tuve de crear otra (doble) e insertar en esta segunda arriba o abajo segun tiro un dado.

La cuestion es que no mezcla nada!!!

Se que la mas facil es crear un vector y aplicarle un shuffle() pero quisiera saber si fuera posible QUE estoy haciendo mal......

Como creo voy a actualizar el codigo que tengo publicado en otro hilo....... lo dejo como referencia del codigo global pero el metodo mezclar() actual (que no funciona) lo coloco aqui:

Código C++:
Ver original
  1. void mezclar()
  2.     {
  3.  
  4.         Baraja carta;
  5.         int up_down;
  6.         std::deque<Baraja> nuevo_mazo;         
  7.        
  8.         // copio el mazo
  9.         for (int i=0;i<54;i++)
  10.         {
  11.             carta = cartas.front();
  12.             cartas.pop();
  13.             nuevo_mazo.push_front(carta);          
  14.         }  
  15.  
  16.         for (int i=0;i<1000;i++)
  17.         {
  18.             // decido si coloco la carta arriba o abajo (cada vez)
  19.             up_down = rand() % 2;
  20.  
  21.             // saco siempre del mismo lado
  22.             carta = nuevo_mazo.front();
  23.             nuevo_mazo.pop_front();
  24.  
  25.             if (up_down==0){
  26.                 nuevo_mazo.push_front(carta);
  27.                 //cout << "arriba\n";
  28.             }
  29.             else{
  30.                 nuevo_mazo.push_back(carta);
  31.                 //cout << "abajo\n";
  32.             }
  33.         }
  34.        
  35.         // lo copio al mazo original
  36.         for (int i=0;i<54;i++)
  37.         {
  38.             carta = nuevo_mazo.front();
  39.             nuevo_mazo.pop_front();
  40.             cartas.push(carta);
  41.         }          
  42.     };

OBVIAMENTE... como sigue SI funciona...... aunque quisiera ENTENDER porque de la primera forma no

Código C++:
Ver original
  1. // SI funciona bien usando vectores
  2. void mezclar()
  3.     {
  4.  
  5.         Baraja carta;
  6.         vector<Baraja> nuevo_mazo (54);        
  7.         int up_down;               
  8.        
  9.         // copio el mazo
  10.         for (int i=0;i<54;i++)
  11.         {
  12.             carta = cartas.front();
  13.             cartas.pop();
  14.             nuevo_mazo.at(i) = carta;          
  15.         }  
  16.  
  17.         random_shuffle (nuevo_mazo.begin(), nuevo_mazo.end());
  18.        
  19.         // lo copio al mazo original
  20.         for (int i=0;i<54;i++)
  21.         {
  22.             carta = nuevo_mazo.at(i);          
  23.             cartas.push(carta);
  24.         }          
  25.     };

Dejo entonces referencia al resto del codigo del otro hilo
GRACIAS!
__________________
Salu2!

Última edición por Italico76; 17/06/2014 a las 18:13