Hola Ali:<div><br></div><div>Te comento:</div><div><br></div><div>Para generar una matriz de enteros es suficiente con generar una secuencia de enteros que luego trataremos como una matriz; por eso es suficiente con generar</div>
<div><br></div><div><br></div><div><b>m = (int *) malloc(nF*nC*sizeof(int)); </b></div><div><b><br></b></div><div>después que tenemos el espacio de memoria, lo utilizamos como si fuera una matriz de nC columnas; es decir:</div>
<div><br></div><div><b> combinaciones((void *) m); </b></div><div><b><br></b></div><div>el prototipo de combinaciones es:</div><div><br></div><div><b>void combinaciones(int mat[][nC]);</b></div><div><br></div><div>Observa que no es necesario poner el número de filas, aunque podrías ponerlo sin problemas.</div>
<div><br></div><div>En mi máquina (intel core i5) los cálculos son rapidísimos, tanto la generación de la memoria como la obtención de las combinaciones.</div><div><br></div><div>Luego, si quieres comprobar los valores puedes hacerlo con la función:</div>
<div><br></div><div><b>mostrar((void *)m); </b></div><div><br></div><div>pero, esto si que tarda bastante tiempo.</div><div><br></div><div>Por supuesto, no está de más comprobar que la asignación de memoria ha sido correcta (tal como te comenta Salvador Pozo.</div>
<div><br></div><div>A mi me funciona aparentemente bien (no he analizado detenidamente los resultados)</div><div><br></div><div>A continuación te copio todo el programa con los prototipos y las declaraciones de funciones.</div>
<div><br></div><div><div>#include <stdio.h></div><div>#include <stdlib.h></div><div><br></div><div><br></div><div>/*Programa que calcula las combinaciones de 25 numeros tomados de 6 en 6 y el resultado lo expresa en forma de una matriz 177000x6 dinamica*/</div>
<div><br></div><div><br></div><div>#define nF  177100  // Número de filas</div><div>#define nC       6  // Número de columnas</div><div><br></div><div>void set0(int mat[][nC]);</div><div>void setnf(int mat[][nC]);</div><div>
void mostrar(int mat[][nC]);</div><div>void combinaciones(int mat[][nC]);</div><div><br></div><div><br></div><div>void set0(int mat[][nC])</div><div>{</div><div>    // inicia a ceros la matriz</div><div>    int f, c;</div>
<div>    </div><div>    for (f=0; f<nF; f++)</div><div>    {</div><div>        for (c=0; c<nC; c++)</div><div>            mat[f][c]=0;</div><div>    }</div><div>}</div><div><br></div><div>void setnf(int mat[][nC])</div>
<div>{</div><div>    // inicia en la primera posición de cada fila el número de fila</div><div>    int f, c;</div><div>    </div><div>    for (f=0; f<nF; f++)</div><div>    {</div><div>        mat[f][0]= f;</div><div>        for (c=1; c<nC; c++)</div>
<div>            mat[f][c]=0;</div><div>    }</div><div>}</div><div>void mostrar(int mat[][nC])</div><div>{</div><div>    int f, c;</div><div>    </div><div>    for (f=0; f<nF; f++)</div><div>    {</div><div>        for (c=0; c<nC; c++)</div>
<div>            printf(" %d ", mat[f][c]);</div><div>            printf("\n");</div><div>    }</div><div>}</div><div><br></div><div>void combinaciones(int mat[][nC])</div><div>{</div><div>    int f, c, i1, i2, i3, i4, i5, i6;</div>
<div>    </div><div>    f = 0;</div><div><br></div><div>    for (i1 = 1; i1 <= 25; i1++)</div><div>    {</div><div>        for (i2 = i1 + 1; i2 <= 25; i2++)</div><div>        {</div><div>            for (i3 = i2 + 1; i3 <= 25; i3++)</div>
<div>            {</div><div>                for (i4 = i3 + 1; i4 <= 25; i4++)</div><div>                {</div><div>                    for(i5 = i4 + 1; i5 <= 25; i5++)</div><div>                    {</div><div>                        for (i6 = i5 + 1; i6 <= 25; i6++)</div>
<div>                        {</div><div>                            if ((i1 != i2) && (i1 != i3) && (i1 != i4) &&</div><div>                               (i1 != i5) && (i1 != i6) && (i2 != i3) &&</div>
<div>                               (i2 != i4) && (i2 != i5) && (i2 != i6) &&</div><div>                               (i3 != i4) && (i3 != i5) && (i3 != i6)&&</div><div>                               (i4 != i5) && (i4 != i6) && (i5 != i6))</div>
<div>                            {</div><div>                                c = 0;</div><div>                                mat[f][c] = i1;</div><div>                                c = c + 1;</div><div>                                mat[f][c] = i2;</div>
<div>                                c = c + 1;</div><div>                                mat[f][c] = i3;</div><div>                                c = c + 1;</div><div>                                mat[f][c] = i4;</div>
<div>                                c = c +1;</div><div>                                mat[f][c] = i5;</div><div>                                c = c + 1;</div><div>                                mat[f][c] = i6;</div>
<div>                                f = f + 1;</div><div>                            }</div><div>                        }</div><div>                    }</div><div>                }</div><div>            }</div><div>        }</div>
<div>    }</div><div><br></div><div>}</div><div>int main(void)</div><div><br></div><div>{</div><div>  </div><div>    int *m = NULL;</div><div>    </div><div>    // reserva dinámica de memoria para la matriz</div><div>    </div>
<div>    m = (int *) malloc(nF*nC*sizeof(int)); </div><div><br></div><div>    </div><div><br></div><div>    // set0((int **)m); // establecer la matriz a ceros</div><div><br></div><div>    // setnf((void *)m); // establecer el número de fila</div>
<div>    </div><div>    </div><div>    // system("time");</div><div>    combinaciones((void *) m); // cálculo de las combinaciones (aprox 1 seg)</div><div>    // system("time");</div><div>    // system("pause");</div>
<div>    </div><div>    mostrar((void *)m); // mostrar matriz, tarda bastante, sólo para test</div><div>    system("time");</div><div>    </div><div>    /*Liberacion de memoria*/</div><div>    free(m);</div><div>
<br></div><div>    return 0;</div><div>}</div><div><br></div><div><br></div><div>Saludos</div><div><br></div><div>José Luis</div><div><br></div><div><br></div><div class="gmail_quote">El 29 de octubre de 2012 01:14, Ali Rincon <span dir="ltr"><<a href="mailto:alrincon1963@hotmail.com" target="_blank">alrincon1963@hotmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Caramba hermano, tiene Ud. toda la razón. Con las correciones que Ud. hizo el programa corre hermosamente. Mis respetos. Pero, permitame hacerle una pregunta: Este programa servirá para una matriz de 3268760x15, es decir, 25 elementos tomados de 15 en 15, que es realmente a donde quiero llegar??<br>

<br>
Le expreso todo mi agradecimiento por su amable ayuda,<br>
<br>
Ali Rincon<br>
Venezuela<br>
<br>
SP> Hola, Ali:<br>
SP> Hay dos errores, el número de combinaciones de 25 elementos tomados de 6 en 6 es 177100, no 177000. El programa deja de funcionar cuando se llega al elemento del array 177001.<br>
SP> El otro error es que en el bucle para reservar memoria para cada fila usas el valor nC en lugar de nF.<br>
SP> Además, en previsión de un error al reservar memoria (y más en arrays dinámicos tan grandes), hay que hacer una verificación de errores:<br>
SP> ----8<------<br>
SP>     mat = malloc(nF * sizeof(int *));<br>
SP>     if(!mat) {<br>
SP>         printf("Error de memoria\n");<br>
SP>         return 1;<br>
SP>     }<br>
SP>     for(f = 0; f < nF; f++) {<br>
SP>         //mat[f] = (int *)malloc(nC * sizeof(int));<br>
SP>         mat[f] = malloc(nC * sizeof(int));<br>
SP>         if(!mat[f]) {<br>
SP>             printf("Error de memoria\n");<br>
SP>             for(c = 0; c < f; c++) free(mat[c]);<br>
SP>             free(mat);<br>
SP>             return 1;<br>
SP>         }<br>
SP>     }<br>
SP> ---8<------<br>
SP> Hasta pronto.<br>
SP> --<br>
SP> Salvador Pozo (Administrador)<br>
SP> mailto:<a href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>
SP> _______________________________________________<br>
SP> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
SP> <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>
SP> 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>
<div class="HOEnZb"><div class="h5">_______________________________________________<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>
</div></div></blockquote></div><br><br><br clear="all"><div><br></div>-- <br><div>José Luis Torre</div>
<div><a href="http://ww.ehu.es/" target="_blank">ww.ehu.es</a></div>
<div> </div><br>
</div>