Produit matriciel en c
Résolu/Fermé
guitoontruant
Messages postés
315
Date d'inscription
dimanche 7 janvier 2007
Statut
Membre
Dernière intervention
26 août 2011
-
9 nov. 2007 à 12:21
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 mars 2012 à 12:44
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 mars 2012 à 12:44
A voir également:
- Produit matriciel en c
- Clé de produit windows 10 gratuit - Guide
- Ryanair produits interdits en cabine - Guide
- Produit en cours d'envoi certideal - Forum Consommation & Internet
- Historique prix produit - Guide
- Clé de produit office gratuit - Forum Microsoft Office
10 réponses
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
9 nov. 2007 à 12:54
9 nov. 2007 à 12:54
Salut,
Quand tu déclares une variable tableau dans une fonction comme ceci
double d[100];
L'espace alloué à ce tableau n'est utilisable que dans cette fonction.
En fait il faut passer ta variable en paramètre de la fonction:
Tu déclares ton C dans la fonction qui appele prodmat, puis tu appele prodmat avec:
double C[100][100];
prodmat(A, B, C, etc...);
Pi voila...
Quand tu déclares une variable tableau dans une fonction comme ceci
double d[100];
L'espace alloué à ce tableau n'est utilisable que dans cette fonction.
En fait il faut passer ta variable en paramètre de la fonction:
void prodmat(double A[100][100], double B[100][100], double C[100][100], int nla, int nca, int ncb, int nlb) { double C[100][100]; int i,j,k; for (i=0;i<=nla;i++) { for (j=0;j<=ncb;j++) { C[i][j]=0; for (k=0;k<nca;k++) { C[i][j]+=A[i][k]*B[k][j]; } } } }
Tu déclares ton C dans la fonction qui appele prodmat, puis tu appele prodmat avec:
double C[100][100];
prodmat(A, B, C, etc...);
Pi voila...
je fais mes intruction int i,j,k;
for (i=0;i<=nlA;i++)
{
for (j=0;j<=ncB;j++)
{
C[i][j]=0;
for (k=0;k<ncA;k++)
{
C[i][j]+=A[i][k]*B[k][j];
}
ET LE PRODUIT DONNE ZERO EN UNE SEUULE LIGNE
for (i=0;i<=nlA;i++)
{
for (j=0;j<=ncB;j++)
{
C[i][j]=0;
for (k=0;k<ncA;k++)
{
C[i][j]+=A[i][k]*B[k][j];
}
ET LE PRODUIT DONNE ZERO EN UNE SEUULE LIGNE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
guitoontruant
Messages postés
315
Date d'inscription
dimanche 7 janvier 2007
Statut
Membre
Dernière intervention
26 août 2011
53
9 nov. 2007 à 13:02
9 nov. 2007 à 13:02
OK merci pour cette explication claire et précise
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
9 nov. 2007 à 21:26
9 nov. 2007 à 21:26
Le problème c'est qu'avec cette correction vu que C est une recopie, au niveau de la fonction qui appelle prodmat, la matrice C ne contiendra pas le résultat du produit matriciel. Il faudrait soit la passer par un pointeur, soit par une référence.
Ci-dessous une version template du produit matriciel pour une matrice de taille quelconque.
http://www.commentcamarche.net/forum/affich 1907231 produit matriciel en c
Bonne chance
Ci-dessous une version template du produit matriciel pour une matrice de taille quelconque.
http://www.commentcamarche.net/forum/affich 1907231 produit matriciel en c
Bonne chance
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
10 nov. 2007 à 00:28
10 nov. 2007 à 00:28
J'ai du mal à comprendre ce que tu veux dire.
C sera passé comme un pointeur comme s'il s'agissait d'un C déclaré ainsi:
double **C;
Non? Je me fourvoie peut être, mais je crois vraiment que C est passé par adresse et non pas par copie avec ma correction.
C sera passé comme un pointeur comme s'il s'agissait d'un C déclaré ainsi:
double **C;
Non? Je me fourvoie peut être, mais je crois vraiment que C est passé par adresse et non pas par copie avec ma correction.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
10 nov. 2007 à 01:10
10 nov. 2007 à 01:10
Bonjour,
mamiemando
Le problème c'est qu'avec cette correction vu que C est une recopie, au niveau de la fonction qui appelle prodmat, la matrice C ne contiendra pas le résultat du produit matriciel. Il faudrait soit la passer par un pointeur, soit par une référence.
La correction de kilian est bonne, c'est bien un pointeur qu'il envoie et non une recopie.
Dans prod mat(double A[100][100], double B[100][100], double C[100][100], ...),
double C[100][100] pourrait aussi s'écrire double C[][100] ou double (*C)[100]. Il s'agit bel et bien d'un pointeur.
Par exemple, tab[i] est synonyme de *(tab+i), ou encore de i[tab], certe spécial lol.
kilian, dans ton code, tu as redéfini double C[100][100] qui est déjà dans les arguments.
D'autre part, il est tout à fait possible de renvoyer un pointeur sur une variable locale d'une fonction à condition de la mettre en static.
Cdt
mamiemando
Le problème c'est qu'avec cette correction vu que C est une recopie, au niveau de la fonction qui appelle prodmat, la matrice C ne contiendra pas le résultat du produit matriciel. Il faudrait soit la passer par un pointeur, soit par une référence.
La correction de kilian est bonne, c'est bien un pointeur qu'il envoie et non une recopie.
Dans prod mat(double A[100][100], double B[100][100], double C[100][100], ...),
double C[100][100] pourrait aussi s'écrire double C[][100] ou double (*C)[100]. Il s'agit bel et bien d'un pointeur.
Par exemple, tab[i] est synonyme de *(tab+i), ou encore de i[tab], certe spécial lol.
kilian, dans ton code, tu as redéfini double C[100][100] qui est déjà dans les arguments.
D'autre part, il est tout à fait possible de renvoyer un pointeur sur une variable locale d'une fonction à condition de la mettre en static.
Cdt
mamiemando
Messages postés
33545
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
25 février 2025
7 829
10 nov. 2007 à 03:25
10 nov. 2007 à 03:25
Tout à fait je me suis trompée. Je n'utilise jamais la syntaxe avec [ ] mais c'est bien le pointeur qui est passé. Merci pour cette précision et pour ta vigilance.
8 mars 2012 à 11:10
Mais si je commente le double C[100][100] de prodmat ca marche mais ca me retourne des valeurs nulles pour la matrice C quelque soit i et j
Ps g besoin d'un code qui marche merci d'avance
8 mars 2012 à 12:44
Et merci d'ouvrir un post. Celui la remonte et ça sera plus simple.