Fonction langage C

Fermé
leila - 22 déc. 2010 à 20:47
 leila - 22 déc. 2010 à 23:23
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 déc. 2010 à 21:23
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
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
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 déc. 2010 à 22:56
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
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 mercredi 5 août 2009 Statut Membre Dernière intervention 6 août 2011
22 déc. 2010 à 23:04
ç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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 déc. 2010 à 23:05
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
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 mercredi 5 août 2009 Statut Membre Dernière intervention 6 août 2011
22 déc. 2010 à 23:12
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 déc. 2010 à 23:14
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
d'accord fiddy merci pour tn aide je vais voir ca
0
pour ta réponse mahasine c'est ce que je cherche à faire de rendre le résultat sous forme de tableau
0