Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 13-01-2010 16:00:11
- stormin
- Membre
- Inscription : 03-12-2009
- Messages : 124
erreur en c++
SALUT TOUT LE MONDE
dans ce programme ,j ai une erreur dans l'affichage de resultat de determinant
je vois pas ou est le probleme
# include <iostream>
# include <cmath>
using namespace std;
/*lecture de deux matrices carrées*/
void lecture (double X[][10],int a)
{
int I,J;
for (I=0;I<a;I++)
for (J=0;J<a;J++)
{
cout<<"donner votre element "<<I<<" , "<<J<<endl;
cin>>X[i][J];
}
}
/* affichage de la matrice*/
void affichage(double X[][10],int a)
{
int I,J;
cout<<"votre matrice est la suivante:"<<endl;
for (I=0;I<a;I++)
{
for (J=0;J<a;J++)
cout<<X[i][J]<<" ";
cout<<endl;
}
}
void produit(double X[][10],double Y[][10],double Z[][10],int a)
{
int I,J,K;
//initialisation de la matrice C
for (I=0;I<a;I++)
for (J=0;J<a;J++)
Z[i][J]=0;
// Calcul de la matrice C=A*B
for (I=0;I<a;I++)
for (J=0;J<a;J++)
for (K=0;K<a;K++)
Z[i][J]=Z[i][J]+X[i][K]*Y[K][J];
}
void puissance (double X[][10],double CB[][10],int a)
{
double Ck[10][10];
int i,j,k,L;
cout<<"donner la valeur de k pour caculer C^k"<<endl;
cin>>k;
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=X[i][j];
for(L=1;L<k;L++)
{produit(X,Ck,CB,a);
for(i=0;i<a;i++)
for(j=0;j<a;j++)
Ck[i][j]=CB[i][j];
}
}
/*Cette fonction nous est utile dans le calcul du determinant, elle supprime dans
la matrice ma les lignes l et c puis enregistre les resultats dans mb*/
void det_aux(double ma[][10],double mb[][10],int l,int c)
{
int i,j,d,e=0;
for(i=0;i<10;i++)
{
d=0;
if(i!=l)
{
for(j=0;j<10;j++)
if(j!=c)
{
mb[e][d]=ma[i][j];
d++;
}
e++;
}
}
}
/*******************************************************************************/
/*Cette fonction teste si un entier est multiple de 2,
cette fonction nous sert dans le calcul du determinant*/
double expo(int n)
{
if(!(n%2)){return (1);}
return (-1);
}
/********************************************************************************/
/* Cette fonction calcul le determinant d'une matrice de maniere recursive*/
double determinant(double m[][10],int l)
{
int i;
double m2[10][10],x=0;
if(l==1)
{
return (m[0][0]);
}
for(i=0;i<l;i++)
{
det_aux(m,m2,i,0);
x=x+(expo(i)*m[i][0]*determinant(m2,(l-1)));
}
return (x);
}
int main()
{
int n;
double A[10][10],B[10][10],C[10][10],CP[10][10];
cout<<"donnez la taille des matrices"<<endl;
cin>>n;
cout<<"lecture de la matrice A"<<endl;
lecture(A,n);
cout<<"lecture de la matrice B"<<endl;
lecture(B,n);
produit(A,B,C,n);
cout<<"affichage des elements de la matrice A "<<endl;
affichage( A,n);
cout<<"affichage des elements de la matrice B "<<endl;
affichage( B,n);
cout<<"affichage des elements de la matrice C "<<endl;
affichage(C,n);
puissance (C,CP,n);
cout<<"la matrice de puissance k "<<endl;
affichage(CP,n);
cout<<"Le determinant de notre matrice C est :"<<endl;
determinant(C,n);
system("PAUSE");
return 0;
}
Hors ligne
#2 14-01-2010 18:19:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 946
Re : erreur en c++
Salut,
je ne connais rien au C++, néanmoins je me suis penché sur ton truc...
Quand tu dis :
dans ce programme ,j ai une erreur dans l'affichage de resultat de determinant
qu'est-ce que tu entends par là ?
Cela veut-il dire que l'affichage ne correspond pas à ce que tu attends ?
Dans ce cas la valeur qui s'affiche du déterminant est-elle la même que celle qui est calculée ?
Le seul conseil que je te donnerais est de faire un test (si c'est possible) avec :
1. Une matrice carrée d'ordre 2
2. Une matrice carrée d'ordre 3
Pourquoi ?
1. Parce qu'on peut calculer facilement à la main, les déterminants de ces 2 matrices
2. Parce que si le déterminant pour n = 2
a) est faux, ton algorithme écrit en C++ est faux et vu la dimension, tu peux trouver facilement pourquoi
b) est juste, tu vas passer au point 3.
3. 2. Parce que si le déterminant pour n = 3
a) est faux, ton algorithme écrit en C++ est faux.
Or comme il est juste pour n = 2, l'erreur se situe au passage à la dimension inférieure.
b) est juste et comme tes tests précédents pour une dimension supérieure l'erreur est au même endroit...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
Pages : 1