karamellatti
Messages postés23Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention25 janvier 2007
-
18 janv. 2007 à 12:08
karamellatti
Messages postés23Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention25 janvier 2007
-
25 janv. 2007 à 17:11
salut tout le monde,
je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..
voici le programme source en cpp:
class matrice
{
private:
int n,m;
float *val;
public:
//constructeur
matrice(int i,int j);
//destructeur
~matrice();
//constructeur de recopie
matrice(const matrice & src);
// affichage
void affiche();
//acces a un element
float getElement(int i,int j);
//modifier un element
void setElement(int i,int j,float v);
//addition de deux matrices
matrice operator+(matrice b);
};
//definition de la fonction d affichage
void matrice::affiche()
{
int i, j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++) cout << val[(j-1)*n+(i-1)] << " ";
cout << endl;
}
cout << endl;
}
//definition de la fonction getElement()
float matrice::getElement(int i,int j)
{
return(val[(j-1)*n+(i-1)]);
}
//definition de la fonction setElement()
void matrice::setElement(int i,int j,float v)
{
val[(j-1)*n+(i-1)]=v;
}
int main()
{
matrice a(3,3);
matrice b(a);
a.setElement(1,1,7);
matrice c(3,3);
a.affiche();
b.affiche();
c=a+b;
c.affiche();
a(1,1)=4; // l operateur "()" realisant la fonction setElement precedente
a.affiche();
maitenant l'instruction en rouge qui me cree un problem car je voudrais bien trouver une methode pour definir l'operateur () pour qu'il face ce que fait la fonction setElement et en meme temps me réalise l'instruction
: a(1,1)=4;
Merci d'avance pour votre cooperation et votre aide
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 18 janv. 2007 à 15:48
Salut,
Il me semble que tu devrais faire un delete avant de réallouer dans le constructeur par recopie.
Pour l'operator + il vaudrait mieux passer une réference :
Matrice operator + (const Matrice&);
Je pense aussi que tu devrais surcharger l'operator = (affectation) .
Il serait aussi plus simple d'avoir un tableau de pointeurs sur float :
float** val;
Ce qui te permettrais de surcharger l'operator [] facilement
ex :
float f = uneMatrice[1][2];
uneMatrice[0][0] = unFloat;
Donc ce n'est pas l'operator() mais l'operator[] que tu dois définir pour ta question.
karamellatti
Messages postés23Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention25 janvier 2007 24 janv. 2007 à 12:24
Salut tout le monde,
merci yann_lo_san pour tes conseils mais sans faire le delete le compilateur va le lancer par défaut à ce que je pense ..mais je voudrais savoir pourquoi selon toi je devrais passer une reference pour l operateur + ...
merci aussi turnerom pour ton aide tu y étais presque ..
en fait je l'ai trouvé avec ton aide c'est bien ca:
float &matrice :: operator() (int i ,int j)
{
return (val[(j-1)*n+(i-1)]);
}
comme ca je pourrais changer n'importe quel element dans la matrice exp: a(2,1)=3; et j'ai la matrice en retour .
Merci a tous
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 24 janv. 2007 à 14:57
Salut,
pour le constructeur par recopie, tu as raison.
Pour l'operator + c'est simplement parceque tu n'as pas besoin de copier la matrice entière sur la pile
matrice operator+(const matrice& b) const
{
matricc matRenvoi;
// fait l'addition de this et b dans matRenvoi
return matRenvoi;
}
karamellatti
Messages postés23Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention25 janvier 2007 25 janv. 2007 à 17:11
Salut tout le monde,
j'ai besoin de votre aide pour la résolution de l'equation a*x+b=0 en utilisant la récursivité avec la méthode de Dichotomie.
merci