[Langage C] Fonction utilisant tableau
Tunaki
-
EminoMeneko Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
EminoMeneko Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous ! Je suis en train d'écrire une bête fonction qui calcule le produit de deux matrices mais j'ai un problème assez bizarre.
Voici le code que j'ai :
void produit_matrice(double *A, double *B, double *C, int N, int M, int L){
int i,j,k,res;
for(j=0;j<=L-1;j++){
for(i=0;i<=N-1;i++){
res=0;
for(k=0;k<=M-1;k++){
res=res+A[i+k*N]*B[k+j*M];
printf("res=%g\n",res);
}
C[i+j*N]=res;
exit(0);
}
}
}
int main(void){
int N=2,M=3,L=2;
double A[6],B[6],C[4];
A[0]=0.999;A[1]=1.001;A[2]=2.001;A[3]=0.999;A[4]=-1.001;A[5]=1.001;
B[0]=0.999;B[3]=1.001;B[1]=2.001;B[4]=0.999;B[2]=-1.001;B[5]=1.001;
printf("%g\t%g\t%g\n",A[0],A[2],A[4]);
printf("%g\t%g\t%g\n",A[1],A[3],A[5]);
printf("\n");
printf("%g\t%g\n",B[0],B[3]);
printf("%g\t%g\n",B[1],B[4]);
printf("%g\t%g\n",B[2],B[5]);
printf("\n");
produit_matrice(A,B,C,N,M,L);
printf("%g\t%g\n",C[0],C[2]);
printf("%g\t%g\n",C[1],C[3]);
return 0;
}
J'ai mis le exit(0) puisque ça ne marche pas avant d'arriver là. Il me sort bien 3 valeurs de res mais les 3 valent -1.001 selon lui, alors que c'est faux !
(le premier res devrait valoir A[0]*B[0]=0.999*0.999)
Le pire dans tout ça, et c'est là que je ne comprends plus rien, si je demande à afficher A[0] et B[0] avant le boucle sur k, et bien, le premier res devient bien 0.999 !!!!
Si vous avez une idée, je vous en serai reconnaissant !
EDIT : En fait le problème est plus grave que cela. Je viens de me rendre compte que si je demande à afficher res juste après avoir déclaré res=0, il m'affiche res=-1.001......
Voici le code que j'ai :
void produit_matrice(double *A, double *B, double *C, int N, int M, int L){
int i,j,k,res;
for(j=0;j<=L-1;j++){
for(i=0;i<=N-1;i++){
res=0;
for(k=0;k<=M-1;k++){
res=res+A[i+k*N]*B[k+j*M];
printf("res=%g\n",res);
}
C[i+j*N]=res;
exit(0);
}
}
}
int main(void){
int N=2,M=3,L=2;
double A[6],B[6],C[4];
A[0]=0.999;A[1]=1.001;A[2]=2.001;A[3]=0.999;A[4]=-1.001;A[5]=1.001;
B[0]=0.999;B[3]=1.001;B[1]=2.001;B[4]=0.999;B[2]=-1.001;B[5]=1.001;
printf("%g\t%g\t%g\n",A[0],A[2],A[4]);
printf("%g\t%g\t%g\n",A[1],A[3],A[5]);
printf("\n");
printf("%g\t%g\n",B[0],B[3]);
printf("%g\t%g\n",B[1],B[4]);
printf("%g\t%g\n",B[2],B[5]);
printf("\n");
produit_matrice(A,B,C,N,M,L);
printf("%g\t%g\n",C[0],C[2]);
printf("%g\t%g\n",C[1],C[3]);
return 0;
}
J'ai mis le exit(0) puisque ça ne marche pas avant d'arriver là. Il me sort bien 3 valeurs de res mais les 3 valent -1.001 selon lui, alors que c'est faux !
(le premier res devrait valoir A[0]*B[0]=0.999*0.999)
Le pire dans tout ça, et c'est là que je ne comprends plus rien, si je demande à afficher A[0] et B[0] avant le boucle sur k, et bien, le premier res devient bien 0.999 !!!!
Si vous avez une idée, je vous en serai reconnaissant !
EDIT : En fait le problème est plus grave que cela. Je viens de me rendre compte que si je demande à afficher res juste après avoir déclaré res=0, il m'affiche res=-1.001......
A voir également:
- [Langage C] Fonction utilisant tableau
- Tableau word - Guide
- Fonction si et - Guide
- Langage ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide