Produit matriciel en c
Résolu
guitoontruant
Messages postés
315
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai:
#include <stdio.h>
double prodmat(double A[100][100], double B[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];
}
}
}
return (C);
}
Le compilateur me renvoit un incompatible types in return, je pense que ça vient du fait que le double C eest donnée avec des lignes et des colonnes mais pas prodmat. Comment résoudre ce problème?
Merci d'avance
j'ai:
#include <stdio.h>
double prodmat(double A[100][100], double B[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];
}
}
}
return (C);
}
Le compilateur me renvoit un incompatible types in return, je pense que ça vient du fait que le double C eest donnée avec des lignes et des colonnes mais pas prodmat. Comment résoudre ce problème?
Merci d'avance
A voir également:
- Produit matriciel en c
- Clé de produit windows 10 gratuit - Guide
- Ryanair produits interdits en cabine - Guide
- Historique prix produit - Guide
- Produit de protection solaire - Guide
- Produit en cours d'envoi certideal - Forum Consommation & Internet
10 réponses
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
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
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.
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
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
Et merci d'ouvrir un post. Celui la remonte et ça sera plus simple.