Ver Mensaje Individual
  #19  
Antiguo 22-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 12
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