Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: razler en 5 Julio 2010, 04:45 am



Título: como trabajar con una matriz poco densa o hueca?
Publicado por: razler en 5 Julio 2010, 04:45 am
hola , necesito realizar las operaciones basicas como insertar por fila,por columna,eliminar, apartir de un vector que tiene los valores de una matriz sin tomar en cuenta los ceros, este es una parte de  mi algoritmo
lo que hago es primero leo una matriz cualqiera, luego  paso los valores que no sean ceros(si esque los hay), a un vector, a partir del vector, lo miestro, como si fuera una matriz.
Lo que quiero es con el vector creado, insertar, eliminar, por filia y columna





Código:
void leermatriz(int x[MAX][MAX],int *dimf,int *dimc)
{
   int i,j,m,n,val;
   printf("\n\tIngresar el numero de filas: ");
   fflush(stdin);
   scanf("%d",&m);
   printf("\n\tIngresar el numero de columnas: ");
   scanf("%d",&n);
   printf("\n\tIngresar datos:\n");
   if(m<MAX&&n<MAX){
      for(i=0;i<m;){
         for(j=0;j<n;){
            printf("\n\tM[%d][%d]: ",i+1,j+1);
            scanf("%d",&val);
            x[i][j]=val;
            j=j+1;
         }
         i=i+1;
      }
      *dimf=m;
      *dimc=n;
   }else{
      printf("\n\tDimension fuera de rango");
   }
}
  
void crearvector(matriz mx[MAX],int *dim,int x[MAX][MAX],int dimf,int dimc)
{
   int i,j,k,n;
   n=dimf*dimc;
   *dim=n;
   if(*dim>=0&&*dim<MAX){
      k=0;
      for(i=0;i<dimf;i++){
         for(j=0;j<dimc;j++){
            if(x[i][j]!=0){
               mx[k].fila=i;
               mx[k].columna=j;
               mx[k].valor=x[i][j];
               k=k+1;
            }
         }
      }
      *dim=k;
   }else{
      printf("\n\tfuera de rango");
   }
}
void mostrarvector(matriz mx[MAX],int dimf,int dimc)
{
   int i,j,k=0;
   for(i=0;i<dimf;i++){
      for(j=0;j<dimc;j++){
         if(i==mx[k].fila&&j==mx[k].columna){
            printf("\t%d",mx[k].valor);
            k=k+1;
         }else{
            printf("\t%d",0);
         }
      }
      printf("\n");
   }
  
}
he intentado insertar en el vector, pero me salen algunos ceros ,em algunos casos
y cuando quiero insertar columna peor
tengo que realizar  esto apartir de un verctor que optimize la matriz es decir que ni acepte ceros.


Título: Re: como trabajar con una matriz poco densa o hueca?
Publicado por: do-while en 5 Julio 2010, 05:06 am
¡Buenas!

No queda nada claro que es lo que quieres hacer.

Una pregunta, en las funciones crearvector y mostrarvector, ¿estas pasando un vector de matrices para guardar en cada una de ellas un solo valor?

Si no explicas mejor lo que quieres hacer creo que poco te podremos ayudar.

¡Saludos!


Título: Re: como trabajar con una matriz poco densa o hueca?
Publicado por: razler en 5 Julio 2010, 05:11 am
lo que hago es primero leo una matriz cualqiera, luego  paso los valores que no sean ceros(si esque los hay), a un vector, a partir del vector, lo miestro, como si fuera una matriz.
Lo que quiero es con el vector creado, insertar, eliminar, por filia y columna
 hracias por su respuesta


Título: Re: como trabajar con una matriz poco densa o hueca?
Publicado por: do-while en 5 Julio 2010, 05:43 am
Bueno, ahora nos hace falta saber la definicion del tipo matriz, porque a decir verdad, ver un vector de tipo matriz la verdad es que confunde bastante.

¡Saludos!


Título: Re: como trabajar con una matriz poco densa o hueca?
Publicado por: MIG80 en 5 Julio 2010, 20:25 pm
Hola razler, bueno cuando dices "insertar" asumo que deseas sustituir todos los valores de una fila o columna de una matriz. Si ese es el caso, lo más sencillo seria convertir el vector de nuevo en una matriz, efectuar las operaciones de inserción en esa matriz y luego convertirla de nuevo en su representación optimizada de vector.

Saludos.