[C con Clase] Matrices Multidimensionales

David . di.romero en hotmail.es
Dom Mar 23 17:45:22 CET 2014


Hola a todos,

Tengo una duda sobre cómo recorrer una matriz multidimensional de forma genérica.

Ejemplos de recorrido para casos particulares:

-> 1 dimensión:

unsigned int d0 = 3;
double m[d0];
for (unsigned int i = 0; i < d0; i++){
m[i] = 0;
}

-> 2 dimensiones:

unsigned int d0 = 3;
unsigned int d1 = 4;
double m[d0][d1];
for (unsigned int i = 0; i < d0; i++){
for (unsigned int j = 0; j < d1; j++){
m[i][j] = 0;
}
}

-> 3 dimensiones:

unsigned int d0 = 3;
unsigned int d1 = 4;
unsigned int d2 = 5;
double m[d0][d1][d2];
for (unsigned int i = 0; i < d0; i++){
for (unsigned int j = 0; j < d1; j++){
for (unsigned int k = 0; k < d2; k++){
m[i][j][k] = 0;}
}
}

-> 4 dimensiones:

unsigned int d0 = 3;
unsigned int d1 = 4;
unsigned int d2 = 5;
unsigned int d3 = 6;
double m[d0][d1][d2][d3];
for (unsigned int i = 0; i < d0; i++){
for (unsigned int j = 0; j < d1; j++){
for (unsigned int k = 0; k < d2; k++){
for (unsigned int l = 0; l < d3; l++){
m[i][j][k][l] = 0;
}
}
}
}

Como podéis ver, se necesitan tantos bucles for como dimensiones tenga la matriz.

Lo que quiero es hacer un algoritmo que recorra una matriz multidimensional de forma génerica, es decir, sabiendo el número de dimensiones y las dimensiones de una matriz multidimensional, recorrer todos sus elementos. Por ejemplo, sería implementar esta función:

/**
 * Recorre la matriz multidimensional dada, asignándole a todos sus valores el valor 0
* @param numeroDimensiones El número de dimensiones de la matriz multdimensional
* @param dimensiones Un puntero al primer elemento de un array de unsigned ints del mismo tamaño que el
* número de dimensiones dado, de forma que el elemento i-ésimo es la dimensión i-ésima de la matriz multidimensional
* @param matrizMultidimensional Un puntero al primer elemento de la matriz multidimensional
 */
void asignarCeros(unsigned int numeroDimensiones, unsigned int* dimensiones, double* matrizMultidimensional){
// ¿Cómo recorrer la matriz multidimensional?
}

Esta función se utilizaría así, por ejemplo:

// 1 dimensión //

unsigned int numeroDimensiones = 1;
unsigned int dimensiones [1] = {3};
double matrizMultidimensional[3];
asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);

// 2 dimensiones //

unsigned int numeroDimensiones = 2;
unsigned int dimensiones [2] = {3, 4};
double matrizMultidimensional[3][4];
asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);

// 3 dimensiones //

unsigned int numeroDimensiones = 3;
unsigned int dimensiones [3] = {3, 4, 5};
double matrizMultidimensional[3][4][5];
asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);

// 4 dimensiones //

unsigned int numeroDimensiones = 4;
unsigned int dimensiones [4] = {3, 4, 5, 6};
double matrizMultidimensional[3][4][5][6];
asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);

¿alguna idea de cómo implementar la función asignarCeros?

Gracias.


 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140323/99d9a894/attachment.html>


Más información sobre la lista de distribución Cconclase