Fonction langage C

leila -  
 leila -
Bonjour,

j'ai essayé d'ecrire une fonction en langage C qui permet de calculer la tarce d'une matrice
et lorsque j'appel cette fonction dans le main ca me renvoi tjr 0
voila le code de la fonction :

int trace(int m[3][3]){
int tr=0;
int i;
for(i=0;i<3;i++)
tr=tr+m[i][i];
return tr ;
}
merci d'avance

5 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,
    Le code paraît correct. La matrice doit être mal initialisée.
    Montre le code du main et en particulier l'initialisation de la matrice.

    Cdlt,
    0
  2. leila
     
    bonjour fiddy
    merci bcp finallement j'ai trouvé l'erreur c'était dans la déclaration de la variable qui affiche la trace c'est un float par contre pour l'afficher je fesait %d
    cdlt
    0
  3. leila
     
    rebonjour,
    mnt j'ai un autre prb j'ai créeé une fonction qui permet de calculer le produit de 2 matrices son code est le suivant :

    int produit_matrice(int m[3][3],int n[3][3]){

    int p[3][3];
    int i,j,k;
    for (i=0; i<3; i++)
    for (j=0; j<3; j++)
    {
    p[i][j]=0;
    for (k=0; k<3; k++)
    p[i][j] += m[i][k]*n[k][j];
    }

    }

    et puis je l'ai appelé dans le main par :

    r=produit_matrice(A,A);

    sachant que j'ai déclarer r comme suit :

    int r[3][3];

    mais il ya l'erreur suivante : 38 c incompatible types in assignment
    et je n'arrive pas à la corriger
    merci pour votre aide
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ta fonction renvoie un int alors que tu renvoies un int* (adresse mémoire).
      Ce sont des types incompatibles d'où le message de ton compilateur.
      Il faut donc déclarer : int* produit_matrice(...)
      Mais ça ne marchera toujours pas. Tu vas renvoyer une valeur non persistante puisqu'elle est définit localement à la fonction.
      Trois façons :
      1 - Tu définis la fonction en : void produit_matrice(int p[][3], int m[][3], int n[][3]); et tu déclares la matrice p dans ton main.
      2 - Tu définis la fonction en : int* produit_matrice(int m[][3], int n[][3]); et tu déclares p comme un pointeur sur le tas (malloc).
      3 - Tu définis la fonction en : int* produit_matrice(int m[][3], int n[][3]); et tu déclares la matrice p dans la fonction en static : static int p[3][3];

      Pour ma part, je te conseille la méthode 1 qui est plus simple à mettre en place que la méthode 2. La méthode 3 est déconseillée.

      Cdlt,
      0
  4. leila
     
    ma fonction produit_matrice a pour but de renvoyer le produit de 2 matrices sous fome de tableaux a 2 dimmensions
    je pense que le probléme est dans le type de retour de la fonction.
    est ce qu'il n'ya pas possibilité de mettre dans le type de retour un tableau??
    Cdlt
    0
    1. mahasin Messages postés 81 Statut Membre
       
      ça sera mieux de les mettre en tableau pour que les résultats soient claires et bien ordonés plus
      Cdlt
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je t'ai tout dit dans mon post précédent...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. leila
     
    excuses moi,je n'ai pa compris ce que vous voulez dire??
    qu'est ce que je dois mettre en tableaux?
    0
    1. mahasin Messages postés 81 Statut Membre
       
      je veux te dire que tu peux mettre" le résultat" c.à.d le produit de deux matrices sous forme d'un tableau , comme ça tu va plus trouver des problèmes ;) ,
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je t'ai donné trois façons de faire :

      1 - Tu définis la fonction en : void produit_matrice(int p[][3], int m[][3], int n[][3]); et tu déclares la matrice p dans ton main.
      2 - Tu définis la fonction en : int* produit_matrice(int m[][3], int n[][3]); et tu déclares p comme un pointeur sur le tas (malloc).
      3 - Tu définis la fonction en : int* produit_matrice(int m[][3], int n[][3]); et tu déclares la matrice p dans la fonction en static : static int p[3][3];


      Le plus simple est de faire :
      void produit_matrice(int p[][3], int m[][3], int n[][3]) {
         /*pas besoin de déclarer p puisqu'il est définit dans la fonction main*/
      }
      
      int main(void) {
         int p[3][3]={0};
         int m[3][3]=...;
         int n[3][3]=...;
         produit_matrice(p,m,n);
      
          return 0;
      }
      


      C'est la façon la plus simple. Maintenant si tu veux vraiment que la fonction produit_matrice te renvoit une matrice, il faut que tu fasses la méthode 2 (je déconseille la méthode 3).
      Et dans ce cas, tu dois passer par la fonction malloc.

      Cdlt,
      0
    3. leila
       
      d'accord fiddy merci pour tn aide je vais voir ca
      0
    4. leila
       
      pour ta réponse mahasine c'est ce que je cherche à faire de rendre le résultat sous forme de tableau
      0