<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Hola a todos,<br><br>Tengo una duda sobre cómo recorrer una matriz multidimensional de forma genérica.<br><br>Ejemplos de recorrido para casos particulares:<br><br><blockquote>-> 1 dimensión:<br></blockquote><br><blockquote><blockquote>unsigned int d0 = 3;<br>double m[d0];<br>for (unsigned int i = 0; i < d0; i++){<br><blockquote>m[i] = 0;<br></blockquote>}<br><br></blockquote></blockquote><blockquote>-> 2 dimensiones:<br><br><blockquote>unsigned int d0 = 3;<br>unsigned int d1 = 4;<br>double m[d0][d1];<br>for (unsigned int i = 0; i < d0; i++){<br><blockquote>for (unsigned int j = 0; j < d1; j++){<br><blockquote>m[i][j] = 0;<br></blockquote>}<br></blockquote>}<br><br></blockquote>-> 3 dimensiones:<br><br><blockquote>unsigned int d0 = 3;<br>unsigned int d1 = 4;<br>unsigned int d2 = 5;<br>double m[d0][d1][d2];<br>for (unsigned int i = 0; i < d0; i++){<br><blockquote>for (unsigned int j = 0; j < d1; j++){<br><blockquote>for (unsigned int k = 0; k < d2; k++){<br><blockquote>m[i][j][k] = 0;</blockquote>}<br></blockquote>}<br></blockquote>}<br><br></blockquote>-> 4 dimensiones:<br><br><blockquote>unsigned int d0 = 3;<br>unsigned int d1 = 4;<br>unsigned int d2 = 5;<br>unsigned int d3 = 6;<br>double m[d0][d1][d2][d3];<br>for (unsigned int i = 0; i < d0; i++){<br><blockquote>for (unsigned int j = 0; j < d1; j++){<br><blockquote>for (unsigned int k = 0; k < d2; k++){<br><blockquote>for (unsigned int l = 0; l < d3; l++){<br></blockquote><blockquote><blockquote>m[i][j][k][l] = 0;<br></blockquote>}<br></blockquote>}<br></blockquote>}<br></blockquote>}<br><br></blockquote></blockquote>Como podéis ver, se necesitan tantos bucles for como dimensiones tenga la matriz.<br><br>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:<br><br><blockquote>/**<br> * Recorre la matriz multidimensional dada, asignándole a todos sus valores el valor 0<br>* @param numeroDimensiones El número de dimensiones de la matriz multdimensional<br>* @param dimensiones Un puntero al primer elemento de un array de unsigned ints del mismo tamaño que el<br>* número de dimensiones dado, de forma que el elemento i-ésimo es la dimensión i-ésima de la matriz multidimensional<br>* @param matrizMultidimensional Un puntero al primer elemento de la matriz multidimensional<br> */<br></blockquote><blockquote>void asignarCeros(unsigned int numeroDimensiones, unsigned int* dimensiones, double* matrizMultidimensional){<br><blockquote>// ¿Cómo recorrer la matriz multidimensional?<br></blockquote>}<br><br></blockquote>Esta función se utilizaría así, por ejemplo:<br><br><blockquote>// 1 dimensión //<br></blockquote><blockquote><blockquote><br></blockquote>unsigned int numeroDimensiones = 1;<br>unsigned int dimensiones [1] = {3};<br>double matrizMultidimensional[3];<br>asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);<br><br></blockquote><blockquote>// 2 dimensiones //<br></blockquote><blockquote><blockquote><br></blockquote>unsigned int numeroDimensiones = 2;<br>unsigned int dimensiones [2] = {3, 4};<br>double matrizMultidimensional[3][4];<br>asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);<br><br></blockquote><blockquote>// 3 dimensiones //<br><br></blockquote><blockquote>unsigned int numeroDimensiones = 3;<br>unsigned int dimensiones [3] = {3, 4, 5};<br>double matrizMultidimensional[3][4][5];<br>asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);<br><br>// 4 dimensiones //<br><blockquote><br></blockquote>unsigned int numeroDimensiones = 4;<br>unsigned int dimensiones [4] = {3, 4, 5, 6};<br>double matrizMultidimensional[3][4][5][6];<br>asignarCeros(numeroDimensiones, dimensiones, matrizMultidimensional);<br><br></blockquote>¿alguna idea de cómo implementar la función asignarCeros?<br><br>Gracias.<br><br><br>                                     </div></body>
</html>