Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.


Te adjunto los fuentes de un ejemplo que creo te va a servir para comprobar el funcionamiento de random_shuffle, muestra:



Como la idea es mostrarte el uso de la función random_shuffle, no compliqué el ejemplo con algunas verificaciones que hubieran sido necesarias pero no hacen a la questión.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
no veo el adjunto. Me parece mejor que lo que yo hice ya que no usas otros forms. ¿Viste lo que hice para insertar los valores? ¿Que te parecio? Me costó mucho jejeje.
Responder Con Cita
  #3  
Antiguo 22-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
no veo el adjunto. Me parece mejor que lo que yo hice ya que no usas otros forms. ¿Viste lo que hice para insertar los valores? ¿Que te parecio? Me costó mucho jejeje.
Me parecio que lo había subido, pero indudablemente debo haber cerrado la ventana antes.

Si, lo estuve mirando , ví el trabajo de delimitación de las comas y está muy bién. Pero apuntando a que veas el manejo que hago de de random_shuffle me resultó mas simple hacerlo en el mismo form y no tan elaborado.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-09-2014 a las 03:04:43.
Responder Con Cita
  #4  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
veo que tu usas strings y no usas memoria dinamica como es mi caso y no veo en que fallo yo.
Con respecto a lo que me indicas por privado, si indico solo el numero de filas me da error en ejecucion y si le pongo el & delante de cada parametro solo baraja las filas, osea, {1,2,3}{4,5,6}{7,8,9} lo que hace es barajar los tres grupos y podemos obtener:
{1,2,3}{4,5,6}{7,8,9}
{1,2,3}{7,8,9}{4,5,6}
{4,5,6}{7,8,9}{1,2,3}
{4,5,6}{1,2,3}{7,8,9}
{7,8,9}{1,2,3}{4,5,6}
{7,8,9}{4,5,6}{1,2,3}

Pero no baraja todos los elementos. Si todo fuese parte de un mismo array si que lo haria, o sea:
{1,2,3,4,5,6,7,8,9}
Ahi si que nos barajaria todo pero en el caso anterior lo que me baraja son los punteros a cada fila.

Última edición por aguml fecha: 22-09-2014 a las 11:16:37.
Responder Con Cita
  #5  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Lo que se me ocurrió fue esto:

Código PHP:
void __fastcall TFormPrincipal::ButtonBarajarMatrizClick(TObject *Sender)
{
        
//En este form pedimos el numero de columnas y filas
        
FormDimension->ShowModal();

        
//Obtenemos memoria para nuestro array
        
= new int*[filas];
        for(
int i 0filas; ++i)
                
v[i] = new int[columnas];

        
//En este form rellenamos el array
        
FormRellenado->ShowModal();

        
String s;

        
Memo1->Lines->Clear();
        
Memo1->Lines->Add("Matriz original");

        
//Mostramos el array original
        
for(int f 0filasf++) {
                
"";
                for(
int c 0columnasc++)
                        
String(v[f][c]) +",";
                
Memo1->Lines->Add(s);
        }
        
Memo1->Lines->Add("");
        
Memo1->Lines->Add("Matriz modificada");

        
//Obtengo memoria auxiliar para meter todo el array bidimensional en uno unidimensional
        
int *array_aux = new int[filas columnas];

        
//Relleno el array auxiliar con los datos del array bidimensional
        
int pos 0;
        for(
int f 0filasf++) {
                for(
int c 0columnasc++)
                {
                        
array_aux[pos] = v[f][c];
                        
pos++;
                }
        }

        
//Barajamos los valores del array
        
random_shuffle(&array_aux[0], &array_aux[filas columnas]);

        
//Actualizo el contenido del array bidimensional ya barajado
        
pos 0;
        for(
int f 0filasf++) {
                for(
int c 0columnasc++)
                {
                        
v[f][c] = array_aux[pos];
                        
pos++;
                }
        }

        
//Libero la memoria del array auxiliar
        
delete [] array_aux;

        
//Mostramos el array barajado
        
for(int f 0filasf++) {
                
"";
                for(
int c 0columnasc++)
                        
IntToStr(v[f][c]) +",";
                
Memo1->Lines->Add(s);
        }

        
//Liberamos la memoria del array
        
for(int i 0filas; ++i) {
                
delete [] v[i];
        }
        
delete [] v;

Pero lo ideal sería conseguirlo sin usar un array auxiliar aunque esto funciona correctamente. ¿se te ocurre algo?
Responder Con Cita
  #6  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Si te fijas, en tu codigo que me mandaste lo que haces es barajar las filas pero no el contenido.
Segun he averiguado, usando la memoria dinámica no se consigue que quede la memoria consecutivamente como ocurriría cuando creo el array de forma estática. Ya lo pude ver en un depurador y me lo han confirmado. De ahí viene el problema con random_shuffle asi que la unica solucion que veo es crear un array unidimensional del tamaño filas*columnas y pasar el contenido a este, luego barajar, y por último volcar el resultado al array multidimensional.
Responder Con Cita
  #7  
Antiguo 22-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
veo que tu usas strings y no usas memoria dinamica como es mi caso...
Estoy usando asignación dinámica, fijate las lineas entre comentarios:
Código PHP:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  
int rows CSpinEdit1->Value;
  
int cols CSpinEdit2->Value;

  
/* ------------------------------- */
  
string **v;

  
= new string*[rows];
  for(
int i 0rowsi++) v[i] = new string[cols];
  
/* ------------------------------- */

  
for(int f 0rowsf++)
    for(
int c 0colsc++)
      
v[f][c] = StringGrid1->Cells[c][f].c_str();

  
random_shuffle(&v[0], &v[rows]);
  ... 
Y tenes razon sobre que solo mezcla las líneas. Hace años que no empleaba esa función y lo había echo sobre arreglos de una dimensión.
Otra duda que tengo es si random_shuffle se comporta como se espera cuando la matriz no es cuadrada... Voy a revisar nuevamente y cualquier novedad te aviso.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
tienes razon, gracias por tu interes.
Responder Con Cita
  #9  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
amigo encontré esto por internet y creo que es lo que necesitamos para que funcione correctamente: http://c-faq.com/aryptr/dynmuldimary.html
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funciona en C++ Builder 6 y no en C++ Builder XE dmartinezn C++ Builder 1 07-05-2012 21:08:42
.DBP con c++ builder 6 LuisMiguel C++ Builder 2 22-03-2012 21:34:46
c++ builder anoniboxx C++ Builder 3 29-04-2010 21:17:36
SQL Builder josevaldez Conexión con bases de datos 0 14-07-2005 14:58:00
Builder X Sonic C++ Builder 1 22-12-2004 16:59:48


La franja horaria es GMT +2. Ahora son las 18:23:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi