IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

décomposition d'une matrice


Sujet :

C

  1. #1
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut décomposition d'une matrice
    Bonjour tous le monde ,
    J'ai écris un programme qui lit une matrice composée par des 0 et des 1, puis supprime chaque colonne nul avec la ligne correspondante a cette colonne et implémente en même temps un tableau par l'indice de la colonne supprimée, mais ça marche pas , j'ai vraiment besoin de ce programme. qui peut m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    //la fonction chargée de la décomposition de la matrice
    int* decomposition(int N,int **matrice)
    {
    int found,I,J,i=0;
    int *Tab;
    int k=0;
     
    Tab = (int*)malloc( sizeof(int*)*(N));
     
    for(J=0;J<N;J++){   
            for(I=0;I<N;I++){
              if(matrice[I][J] ==0)
               found=0;
               else
               found =1;
             }
     
           if(found == 0){
           matrice= suppElem( matrice, N, J ); 
           Tab[i]=J;
           i++;
           }
           else
          J++;
           }
    return Tab;
    } 
     
    //la fonction chargée de la suppression de la colonne avec la ligne correspondante
    int** suppElem( int** matrice, int N, int elem_a_sup ){
     int i, j, l = 0,c = 0;
     int **Mat1=NULL,**Mat2=NULL;
     
    Mat1 = (int**) malloc( sizeof(int*) * (N-1) );
     if( Mat1 != NULL )
     for( i=0; i<(N-1); i++ )
     Mat1[i] = (int*) malloc( sizeof(int) * (N-1) ); 
     
    Mat2 = (int**) malloc( sizeof(int*) * (N-1) );
     if( Mat2 != NULL )
     for( i=0; i<(N-1); i++ )
     Mat2[i] = (int*) malloc( sizeof(int) * (N-1) ); 
     
     for( j=0; j<N; j++ ){
     if( j != elem_a_sup ) {
    for( i=0; i<N; i++ )
     {
     Mat1[l][c] = matrice[i][j];
     l++;
     }
      c++;
      l=0;}
     }
     
    for( i=0; i<N; i++ ){
     if( i != elem_a_sup ) 
    for( j=0; j<N; j++ )
     {
     Mat2[l][c] = matrice[i][j];
     c++;
     }
      l++;
      c=0;
     }
     
       for( i=0; i<N; i++ )
     free( Mat1[i] );
     free( Mat1 ); 
     
    return Mat2;
     }

  2. #2
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Déjà quand tu dis ça marche pas qu'est ce que tu veux dire? Erreur de compilation, erreur à l'exécution, mauvais résultats?
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  3. #3
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par guigui5931 Voir le message
    Déjà quand tu dis ça marche pas qu'est ce que tu veux dire? Erreur de compilation, erreur à l'exécution, mauvais résultats?
    J'obtiens un mauvais résultat, quand j'affiche le tableau retourné par la fonction décomposition ça me donne des adresses mémoires

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques bizarreries dans ce code (Voir remarques dans le code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Tab = (int*)malloc( sizeof(int*)*(N));
    // si Tab est un int *, on devrait avoir dans l'argument du malloc sizeof(int)
    // pas sizeof(int*)
    for(J=0;J<N;J++){   
            for(I=0;I<N;I++){
              if(matrice[i][J] ==0)
               found=0;
               else
               found =1;
             }
    ....
    // A quoi sert la boucle for(I=0....) ? 
    // dans cette boucle, i et J sont constants et I est inutilisé 
    // Le code est équivalent à
    // for(J=0;J<N;J++)
    //{
    //   found = matrice[i][J]!=0 ;
    //....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     for( j=0; j<N; j++ ){
     if( j != elem_a_sup ) {
    for( i=0; i<N; i++ )
     {
     Mat1[l][c] = matrice[i][j];
     l++;
     }
    .... // Mat1 n'est plus utilisé ! 
         // A quoi sert-il ?
       for( i=0; i<N; i++ )
     free( Mat1[i] );
     free( Mat1 ); 
    ....
     }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Merci pour la réponse,
    Pour la première boucle c'est une erreur de syntaxe (dsl), je voulais tester si toute la colonne est nul , alors ça devrais être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           if(matrice[ I ][J] == 0);
    J'ai utilisé la matrice Mat1 pour extraire toutes les colonnes sauf celle qui doit être supprimée, puis Mat2 doit contenir les lignes de Mat1 sauf celle qui doit être supprimée. zut , j'ai fait une erreur, je devais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Mat2[l][c] = Mat1[i][j];
    non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Mat2[l][c] = matrice[i][j];

Discussions similaires

  1. Décomposition d'une matrice
    Par jimmypoker dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/11/2009, 23h38
  2. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  3. Décomposition d'une propriété : grammaire ?
    Par mathieu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 04/05/2004, 09h47
  4. Décomposition d'une chaine de caractères
    Par stephdiplo150 dans le forum C
    Réponses: 3
    Dernier message: 04/03/2004, 22h50
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo