Fonction langage C
leila
-
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
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:
- Fonction langage C
- Fonction si et - Guide
- Langage ascii - Guide
- Langage binaire - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
5 réponses
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,
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,
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
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
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
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
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,
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,
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
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
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?
qu'est ce que je dois mettre en tableaux?
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 :
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,
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,