como trabajar con una matriz poco densa o hueca?

Iniciado por razler, 5 Julio 2010, 04:45 AM

0 Miembros y 1 Visitante están viendo este tema.

razler

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





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.

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

razler

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

do-while

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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

MIG80

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.