[C con Clase] Ayuda con la salida de la matriz final.
Davidson, Steven
srd4121 en njit.edu
Dom Ene 5 05:01:58 CET 2014
Hola Ali,
2014/1/4 Ali Rincon <alrincon1963 en hotmail.com>
>
> Hola Steven. Creo que logre hacer algo en el código que te muestro a
> continuacion:
>
[CORTE]
El problema que tengo, y aqui entras tu, si me puedes ayudar por supuesto,
> es que no se como hacer para que la sentencia if(i != 9) lea todos los
> valores que estan contenidos en el vector filasparaeliminar[] cada vez que
> se repita el bucle:
> .
> .
> .
> //Remover la fila donde se encuentre el valor introducido por teclado.
>
> m=0;
> for(i=0; i<10; i++)
> {
> if(i != 9)<--Aqui no se como hacer!!!
>
Esta condición no tiene mucho sentido, porque sabemos de antemano su
veracidad. Sabemos que siempre será verdadera las primeras 8 iteraciones y
siempre será falsa la última iteración. Por lo tanto, no tiene sentido
"castigar" al procesador a hacer algo que nosotros ya sabemos.
Como no nos interesa hacer la última iteración, simplemente no llegamos a
tal iteración en nuestro bucle. Por lo tanto, escribimos,
for( i=0; i<9; i++ )
{
> n=0;
> for(j=0; j<10; j++)
>
No necesitas 'n', porque se comporta de manera idéntica a 'j', por lo que
puedes usar 'j' en lugar de 'n'.
{
> matriz[m][n] = matriz[i][j];
>
'm' también se comporta como 'i', por lo que puedes usar 'i' directamente.
Esto significa que tenemos,
matriz[i][j] = matriz[i][j];
No estoy entendiendo muy bien por qué estás haciendo esta asignación.
n++;
> }
> m++;
> }
> }
> .
> .
> .
> Obviamente los indices en la parte de mostrar matriz deberán modificarse
> acorde a esto.
>
>
Sí, por eso necesitas usar la variable 'indices' para guardar la cantidad
actual de filas (válidas).
Volviendo a tu pregunta original, la verdad es que la contesté en mi
correo-e anterior:
Ahora vamos comprobando cada fila por si se elimina o no. Si no se elimina
la fila, que estamos procesando, entonces la copiamos al "hueco" y
aumentamos el "hueco" para la siguiente comprobación. Si tal fila sí se
elimina, entonces la ignoramos: no se copia, y aumentamos 'indiceEliminar'
para indicar la siguiente fila a eliminar.
La idea es ir comprobando cada fila, representada por su índice, que podría
ser:
int indiceEliminar = 0;
...
// Caso general: copia condicionada
hueco = aFilasParaEliminar[0];
for( i=hueco+1; i<aFilasParaEliminar[contarFilas-1]; i++ )
{
if( i == aFilasParaEliminar[indiceEliminar] )
{
// Si tal fila sí se elimina, entonces la ignoramos: no se copia, y
aumentamos 'indiceEliminar' para indicar la siguiente fila a eliminar.
indiceEliminar++;
}
else
{
// Si no se elimina la fila, que estamos procesando, entonces la
copiamos al "hueco" y aumentamos el "hueco" para la siguiente comprobación.
for( ... )
{
// Copiamos esta fila "i" al "hueco"
...
}
hueco++;
}
}
// Caso especial: copia directa/regular
// Al llegar aquí, i == aFilasParaEliminar[contarFilas-1]
// Copiamos a partir de "hueco"
for( i++; hueco < indices-contarFilas; hueco++, i++ )
{
// Copia las demás filas
for( .... )
matriz[hueco][j] = matriz[i][j];
}
Analiza bien el código que he escrito, porque lo he hecho de cabeza y es
posible que haya cometido algún error, pero se basa en el análisis y diseño
que ya expliqué en mi correo-e anterior.
Espero que esto aclare el tema.
Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140104/9dfd821e/attachment.html>
Más información sobre la lista de distribución Cconclase