<p dir="ltr">De forma recursiva.</p>
<p dir="ltr">Samuel Díaz García</p>
<div class="gmail_quote">El 23/03/2014 21:34, "David ." <<a href="mailto:di.romero@hotmail.es">di.romero@hotmail.es</a>> escribió:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div><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></div>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div>