A voir également:
- Fonction langage C
- Fonction si et - Guide
- Langage ascii - Guide
- Langage binaire - Guide
- Fonction moyenne excel - Guide
- Pascal langage - Télécharger - Édition & Programmation
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
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,
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
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
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,
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
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
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
Cdlt
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
22 déc. 2010 à 23:05
Je t'ai tout dit dans mon post précédent...
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?
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
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 ;) ,
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
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 :
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,