Manipulation d'une matrice comme étant un vecteur

Manipulation d'une matrice comme étant un vecteur - C - Programmation

Marsh Posté le 26-03-2007 à 19:03:19    

Salut,
j'ai besoin de traiter une matrice pour mettre tout les éléments null de la matrice à la fin de la matrice.
Pour ne pas trop compliqué les chose j'ai ponçer à manipuler la matrice comme étant un vecteur,
pour cela on peut accéder à l'element t[i][j] d'une matrice de N lignes et de M colonnes en fesant:
t[ i*M + j ] .
 
voici la fonction que j'ai fait pour l'instant:

Code :
  1. void Compactage( int **mat, int N, int M )
  2. {
  3.     int i, j, L, C, cptNull = 0;
  4.     printf("\nCompactage :\n\n" );
  5.     for( i=0; i<N; i++ )
  6.         for( j=0; j<M; j++ )
  7.             if( mat[i*M+j] == 0 ) // si l'element est null :
  8.             {
  9.                 cptNull++; // on compte.
  10.                 for( L=i; L<N; L++ )
  11.                     for( C=j; C<M; C++ )
  12.                         mat[L*M+C] = mat[L*M+C + 1]; // on fait le decalage
  13.             }
  14.     /* On met les cptNull derniers element de la matrice à 0 */
  15.     for( i=N*M-1; cptNull; i-- )
  16.     {
  17.         cptNull--;
  18.         mat[i] = 0;
  19.     }
  20. }


 
mais ça ne fait pas le compactage! ( ça ne met pas tout les element null à la fin de la matrice )..
 
et je ne vois pas où le probléme peut il bien être...
 
merci.

Reply

Marsh Posté le 26-03-2007 à 19:03:19   

Reply

Marsh Posté le 26-03-2007 à 22:03:18    

ici ?

Code :
  1. int **mat


 
si ta matrice est dans un "vecteur 1D"
pourquoi ne pas vraiment le traiter en vecteur 1D

Code :
  1. void compactage( int *mat, int n)
  2. {
  3.    // code pour un vecteur 1D
  4. }


 
puis appel avec compactage(mat, n*m) !

Reply

Marsh Posté le 26-03-2007 à 22:16:20    

joneal a écrit :

ici ?

Code :
  1. int **mat


si ta matrice est dans un "vecteur 1D"
pourquoi ne pas vraiment le traiter en vecteur 1D

Code :
  1. void compactage( int *mat, int n)
  2. {
  3.    // code pour un vecteur 1D
  4. }


puis appel avec compactage(mat, n*m) !


Parce que c'est une Matrice issu d'une autre fonction... donc il faut la passer à compactage comme étant une matrice, d'ailleur la fonction compactage est fait pour compacter une matrice pas un vecteur , j'ai essayer de manipuler la matrice comme étant un vecteur que pour simplifier sinon c'est pas obligé.
 
 
 
 

Reply

Marsh Posté le 27-03-2007 à 14:09:06    

ca explique pas ou est ton probleme mais j'ai l'impression qu'au lieu du compactage il suffit seulement de reecrire les elements de la matrice mat[k]=mat[i][j]
en utilisant un indice k qui augmente de 1 a chaque element(i,j) sauf quand l'element rencontre est 0.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed