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

A voir également:

5 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
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
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
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
mahasin Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
ça sera mieux de les mettre en tableau pour que les résultats soient claires et bien ordonés plus
Cdlt
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Je t'ai tout dit dans mon post précédent...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
leila
 
excuses moi,je n'ai pa compris ce que vous voulez dire??
qu'est ce que je dois mettre en tableaux?
0
mahasin Messages postés 46 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
leila
 
d'accord fiddy merci pour tn aide je vais voir ca
0
leila
 
pour ta réponse mahasine c'est ce que je cherche à faire de rendre le résultat sous forme de tableau
0