Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#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

#3 14-01-2010 20:11:13

stormin
Membre
Inscription : 03-12-2009
Messages : 124

Re : erreur en c++

merci
j'ai trouvé l'erreur,c 'est que j'ai pas renvoyé le resultat,vers une variable,

det=determinant(C,n);

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
onze plus trente six
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums