<div dir="ltr">Hola Ali,<div class="gmail_extra"><br><div class="gmail_quote">2013/12/21 Ali Rincon <span dir="ltr"><<a href="mailto:alrincon1963@hotmail.com" target="_blank">alrincon1963@hotmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Hola a todos. A continuacion les envio el programa, en donde se calcula unas combinaciones y luego deseo imponer una condicion muy simple (la cual se explica en el programa) y lo que deseo es ver la matriz que debe quedar:<br>

<br></blockquote><div><br></div><div>Hay algunos matices a destacar en el siguiente código fuente.</div><div><br></div><div>[CORTE]</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
    /*Calculo de las combinaciones*/<br>
<br>
    f = 0;<br>
<br>
    for (i1 = 1; i1 <= 15; i1++)<br>
    {<br>
        for (i2 = i1 + 1; i2 <= 15; i2++)<br>
        {<br>
            for (i3 = i2 + 1; i3 <= 15; i3++)<br>
            {<br></blockquote><div><br></div><div>[CORTE]</div><div><br></div><div>Estos bucles no logran el propósito que quieres. Analizando el comportamiento de los bucles y de las variables, vemos que los valores de las variables de los bucles posteriores no deberían llegan a 15, porque nada ocurre en esas últimas iteraciones. Por ejemplo, si i1=15, entonces i2 es 16, por lo que no entra en "su bucle", ni por tanto en los demás bucles anidados. Por consiguiente, los bucles deberían ser,</div>
<div><br></div><div>for( i1=1; i1<=15; i1++ )<br>  for( i2=i1+1; i2<=14; i2++ )<br></div><div><div>    for( i3=i2+1; i3<=13; i3++ )<br></div></div><div><div>      for( i4=i3+1; i4<=12; i4++ )<br></div></div><div>
        ...</div><div><br></div><div>[CORTE]</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
                                                            if ((i1 != i2) && (i1 != i3) && (i1 != i4) && (i1 != i5) &&<br>
                                                                (i1 != i6) && (i1 != i7) && (i1 != i8) && (i1 != i9) &&<br></blockquote><div><br></div><div>[CORTE]</div><div><br></div><div>
Estas condiciones no son necesarias, porque siempre son verdad. 'i1' nunca llegará a ser 'i2', porque 'i2' siempre es 1 más que 'i1'. Asimismo, 'i2' nunca será igual a 'i3', en la misma iteración.<br>
</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">                                                                {<br>

                                                                    c = 0;<br>
                                                                    mat[f][c] = i1;<br>
                                                                    c = c + 1;<br>
                                                                    mat[f][c] = i2;<br></blockquote><div><br></div><div>[CORTE]</div><div><br></div><div>No tiene mucho sentido usar 'c', porque el comportamiento de todas estas sentencias es recorrer cada columna, por lo que podrías haber hecho explícitamente. Esto es,</div>
<div><br></div><div>mat[f][0] = i1;</div><div>mat[f][1] = i2;<br></div><div>mat[f][2] = i3;<br></div><div>...</div><div>f++;<br></div><div><br></div><div>Como puedes ver, hacer las cosas explícitamente no es una buena forma de expresarnos. Nos gustaría automatizar estas asignaciones; para ello, necesitamos una solución general. Si definimos estas variables del bucle como un array, en lugar de definirlas explícitamente, entonces podemos recorrer el array con un índice. Esto es,</div>
<div><br></div><div>int pi = (int *) malloc( nC * sizeof(int) );<br></div><div>...</div><div>for( c=0; c<nC; c++ )<br>  mat[f][c] = pi[c];</div><div>f++;</div><div>...</div><div>free( pi );</div><div><br></div><div><br>
</div><div><div>Necesitas diseñar otro algoritmo para crear cada combinación y que sea general; no solamente las 15 agrupaciones de 14 números.</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
    printf("\nDesea imponer alguna condicion sobre esta matriz (s/n)?: ");<br>
    scanf("%s", &seguir);<br></blockquote><div><br></div><div>Esto puede suponer un grave error. La variable 'seguir' es de tipo 'char', mientras que 'scanf()' espera un array de 'char'. Sugiero usar 'getchar()' o usa el especificador %c para leer y extraer un solo carácter.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
    if(siga != 'n')<br></blockquote><div><br></div><div>Aquí usas 'siga', pero previamente usas 'seguir'. Creo que te interesa comprobar el valor guardado en 'seguir'.</div><div><br></div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
    {<br>
        for(f = 0; f <=nF; f++)<br></blockquote><div><br></div><div>Esto es incorrecto. Como 'f' actúa de índice, no puede alcanzar el valor de 'nF', que representa la cantidad de filas.</div><div><br>
</div><div>Debería ser,</div><div><br></div><div>for( f=0; f<nF; f++ )</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

        {<br>
            for (c=0; c<nC; c++)<br>
<br>
            if (mat[f][c] == 1);<br>
<br>
            //Como hago aqui para definir una rutina que me permita eliminar las filas que contengan al numero uno y me muestre las filas que no contengan<br>
            //al numero uno, en forma de una matriz 15x14.<br>
<br></blockquote><div><br></div><div>Para eliminar elementos en un array, vas a tener que copiar las filas posteriores a la que quieres eliminar, para no dejar "hueco". Luego puedes cambiar el tamaño con 'realloc()'. En tu caso, tienes que eliminar la memoria del array dinámico asociado al puntero de la fila que quieres eliminar.</div>
<div><br></div><div>Ahora bien, leyendo este comentario, parece que te interesa más no mostrar ciertas filas en lugar de eliminarlas. Si es así, entonces simplemente comprueba si existe el 1 en una fila antes de mostrarla. De esta manera, aparecerá lo que quieres, sin tener que modificar el array.</div>
<div><br></div><div><br></div><div>Espero que esto te oriente.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>