Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Surcharge des opérateurs [ Algorithme / Maths ] (karamellatti)

jeudi 18 janvier 2007 à 12:08:17 | Surcharge des opérateurs

karamellatti

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 du constructeur

matrice::matrice(int i, int j)
{
 n=i;
 m=j;

 //reservation de la place memoire
 
 val = new float[n*m];

 //initialisation a zero

 for(i=0; i<n*m; i++) val[i]=0;
}

/definition du destructeur

matrice::~matrice() { delete [] val; }

//definition du constructeur de recopie

matrice::matrice(const matrice &src)
{
 n=src.n;
 m=src.m;
 
 val = new float[n*m];

 for(int i=0; i<n*m; i++) val[i]=src.val[i];
}
 
//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 
 
                                                                                       cordialement, kim


jeudi 18 janvier 2007 à 12:38:12 | Re : Surcharge des opérateurs

laurent1024

http://c.developpez.com/faq/cpp/?page=surcharge#SURCHARGE_matrix_index

++

jeudi 18 janvier 2007 à 15:46:04 | Re : Surcharge des opérateurs

turnerom

void matrice::operator(int i,int j,float v) { setElement(i,j,v); }

jeudi 18 janvier 2007 à 15:48:33 | Re : Surcharge des opérateurs

yann_lo_san

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.


jeudi 18 janvier 2007 à 15:53:30 | Re : Surcharge des opérateurs

turnerom

Oups, désolé, je suis allé un peu vite : si m ton nb de lignes et n ton nb de cols et si i=ligne et j=cols voules float& matrice::operator(int i,int j) { return val[n*i + j]; }

mercredi 24 janvier 2007 à 12:24:19 | Re : Surcharge des opérateurs

karamellatti

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


mercredi 24 janvier 2007 à 14:57:25 | Re : Surcharge des opérateurs

yann_lo_san

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;
}


jeudi 25 janvier 2007 à 17:07:02 | Re : Surcharge des opérateurs

karamellatti

Je vois ok yann_lo_san,
et merci

jeudi 25 janvier 2007 à 17:11:17 | Fonction récursive

karamellatti

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 

                                                                  Cordialement, kim




Cette discussion est classé dans : affiche, int, val, matrice, float


Répondre à ce message

Sujets en rapport avec ce message

fonction et matrice [ par herve_blondel ] bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que Afficher un float a l'ecran, %f de printf [ par kaervas ] Bonjour, je suis en train de coder la fonction %f de printf, je galere un peu en fait! Pour le %d on utilise des modulos et des puissances decroissant compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo rotation d'une image [ par bizibiz17 ] bonjour en fait j'ai un petit pb, je dois rendre en devoir demain et il me reste une petite question que je n'arrive pas à résoudre. j'ai définit une classe matrice [ par cyrinelahsini ] salut,je programme avec c++ sous linux.j'utilise une class matrice avec une fonction membre qui doit me retourner une instance de cette class.mais j'a Allocation Dynamique d'une Matrice Help [ par EMSIEN ] Salut à vous toutes et à vous tous,voilà je veux déclarer une matrice de la sorte:     int** MaMatrice;  dans Une ClassePuis au Niveau du Contructeur Concatener 2 tableuax triés [ par Strick9 ] Salut à tous, je bloque sur l'énoncé suivant.De l'aide serait plus que bienvenue.Ecrire une fonction qui permet d'insérer un tableau d'entier T2 dans langage C : probleme syntax [ par Keymi ] Bonjour , tous d'abord le but de l'exercice est de faire une fonction permettant de determiner la valeur maximale et minimale d'un tableau de flottant Tableau en parametre [ par tomalille ] Bonjour, j'ai un segmentation fault sur l'execution d'un programme. Le probleme vient d'une fonction ayant un tableau en parametre. Lorsque je veux a undefined reference to sstev [ par keno83 ] Bonjour a tous je rencontre en ce moment un probleme de compilation avec la librarie lapack qui m'embete depuis bien une semaine. En fait , j'ai un pr


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.