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 : Créer un classe de matrice [ Divers / Débutant(e) ] (kazeton)

mercredi 12 décembre 2007 à 00:29:44 | Créer un classe de matrice

kazeton

Bonjour à tous,
Je débute en c++ et je voudrais réaliser un classe de matrice.On m'a donné le .h et on m'a demandé de réaliser un .cc afin de définir tout d'abord une classe de vecteurs puis la classe de matrice proprement dite.

Voici le matrice.h:

class Vecteur {
private :
unsigned int n ; // Ta i l l e du v e c t e ur
double* p ;//création de p par allocation dynamique
public :

Vecteur ( int _n ) : n ( _n ) , p (new double [ _n ] )

{
for ( int i=0; i<n ; ++i )
p [ i ] = 0 ;//initialisation à zero
}

Vecteur ( const Vecteur&);
Vecteur& operator=(const Vecteur&);//assignation

double& operator ( ) ( int i ) {return p [ i ] ; }
double operator ( ) ( int i ) const {return p [ i ] ; }//donne l'élément de la i ème ligne

unsigned int size ( ) const {return n ; }
~Vecteur ( ) { delete [ ] p ; } // Un d e s t ruc t eur , rend l a mémoire
// dynamiquement a l l o u é par l e
// c ons t r u c t e u r quand l e Vecteur
// e s t d é t r u i t .
} ;
extern Vecteur operator+(const Vecteur&, const Vecteur&);//additionne deux vecteurs
extern Vecteur operator-(const Vecteur&, const Vecteur&);//soustrait deux vecteurs
extern Vecteur operator *(double , const Vecteur&);//multiplie deux vecteurs par une constante
inline Vecteur operator *( const Vecteur& x , double alpha )//?
{
return alpha*x ;
}

class Matrice {
private :
unsigned int nx ;// Nombre de lignes (1er paramètre)
unsigned int ny ;// Nombre de colonnes (2ème paramètre)
double* p ;
public :
Matrice (unsigned int _nx , unsigned int _ny ) ;//défini la taille de la matrice
Matrice ( const Matrice& a ) ;
Matrice& operator=(const Matrice&);//assignation
double& operator ( ) ( int i , int j ) {return p [ nx*i+j ] ; }
double operator ( ) ( int i , int j ) const {return p [ nx*i+j ] ; }//retour l'élément (i,j)
unsigned int nb_lines ( ) const {return nx ; }
unsigned int nb_columns ( ) const {return ny ; }
~Matrice ( ) ;
} ;
extern Matrice operator+(const Matrice&, const Matrice&);
extern Matrice operator-(const Matrice&, const Matrice&);
extern Matrice operator *(double , const Matrice&);
inline Matrice operator *( const Matrice& A , double alpha )
{
return alpha*A ;
}
extern Matrice operator *( const Matrice&, const Matrice&);
extern Vecteur operator *( const Matrice&, const Vecteur&);


J'ai plusieurs questions:

1) Que signifie cette ligne de code "Vecteur ( int _n ) : n ( _n ) , p (new double [ _n ] )"
Je ne comprend pas l'underscore avant le n
2)Je ne vois pas comment définir les opérateurs suivants:

Vecteur ( const Vecteur&);

je ne vois pas à quoi cela peu servir

Vecteur& operator=(const Vecteur&);//assignation

Je n'arrive pas à définir l'assignation pour un vecteur de taille n quelconque

mercredi 12 décembre 2007 à 17:12:04 | Re : Créer un classe de matrice

rt15

Membre Club
Salut,

1) A "rien". Pour le compilo, c'est un peu comme si ce caractère faisait parti de l'alphabet au même titre que a,b,c... Celui qui a écrit ton source à mis ça simplement pour avoir un nom de paramètre différent du nom de l'attribut n.

2) Pour le premier opérateur, c'est le constructeur par copie. Faut simplement que tu initialises ton vecteur avec les données de la copie passée en paramètre.
Dans ce genre là quoi :

Vecteur::Vecteur ( const Vecteur& v)
{
  n = v.size();
  p = new double[n];
  for (int i = 0 ; i < n ; i++)
    p[i] = v(i);
}


Pour le =... Bin ça doit être un code très proche de celui du constructeur par copie, sauf que le tableau p peut déjà contenir des valeurs, donc attention à pas faire de fuite de mémoire.

3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08

mercredi 12 décembre 2007 à 18:46:13 | Re : Créer un classe de matrice

luhtor

L'ajout d'un underscore "_" devant chaque  variable recu en argument n'est d'intérêt que pour améliorer la visibilité du programme. Au meme titre que "m_" devant les variables membres d'une classe, ou l'ajout d'un "l" (ex "int lValue") pour les variables locales.

mercredi 12 décembre 2007 à 20:31:50 | Re : Créer un classe de matrice

nickydaquick

Membre Club

Salut,
1) il s'agit comme ont dit les autres avant moi d'un nom de variable comme tout autre nom.
   la ligne Vecteur(int _n):n(_n),p(new double[_n]){} est le constructeur par defaut avec les variables initialisees avec les valeurs entre parentheses ( c comme si tu mettais un operateur d'affectation = ).

2)
    Vecteur ( const Vecteur&); contructeur par copie (par reference)
    Vecteur& operator=(const Vecteur&);//surcharge de l'operateur d'affectation

   l'operateur d'affectation effectue les memes operations( en general) que le constructeur par copie et retourne une reference sur le resultat, contrairement au constructeur par copie. Une maniere de les ecrire pour montrer a quel point les 2 implementations se ressemblent:
Vecteur::Vecteur ( const Vecteur& v)
{
    if(this==&v)return;
    if(!p)p = new double[n];
    *this = v;
}
Vecteur& Vecteur::operator=(const Vecteur& v)
{
    for(int i=n;--i>=0;)p[i]=v.p[i];
}

J'espere avoir aide, salut

je suis heureux de faire partie d'une grande famille ...!

mercredi 12 décembre 2007 à 20:32:52 | Re : Créer un classe de matrice

nickydaquick

Membre Club
salut , petit oubli :
Vecteur& Vecteur::operator=(const Vecteur& v)
{
    for(int i=n;--i>=0;)p[i]=v.p[i];
    return (*this);
}

je suis heureux de faire partie d'une grande famille ...!

vendredi 21 décembre 2007 à 03:29:49 | Re : Créer un classe de matrice

kazeton

j'ai compris pour l'implémentation de l'opérateur d'assignation.Par contre pour l'addition et la multiplication par un réel j'ai plein de problèmes.
Voici mon code
Vecteur& Vecteur::operator *(double& alpha, const Vecteur& x)
{
    new Vecteur multr
    for(int i=n;--i>=0;)
    multr(i)=alpha*x(i);
    return (multr);

}
Vecteur::operator+(const Vecteur& u, const Vecteur& x)
{
    new Vecteur plus
    for(int i=n;--i>=0;)
    plus(i)=u(i)+x(i);

    return (plus);

}

mon compilateur me retourne que je n'ai aps défini les opérateur dans le .h
Je suis perdu.



vendredi 21 décembre 2007 à 21:53:30 | Re : Créer un classe de matrice

nickydaquick

Membre Club

Salut,

dans le .hpp (le header de la classe) ajoute :

const Vecteur operator*(const double& alpha)const; // multiplie un vecteur par un double
friend const Vecteur operator*(const double& alpha,const Vecteur& v);// multiplie un double par un vecteur

const Vecteur operator+(const Vecteur& v)const; // additionne un vecteur avec un vecteur

 

 

dans le .cpp (dans l'implementation) :
const Vecteur Vecteur::operator *(const double& alpha)const
{
    Vecteur m = *this;
    for(int i=n;--i>=0;)
    m(i)=alpha*(*this)(i);
    return m;
}
const Vecteur operator *(const double& alpha,const Vecteur& u)
{
    Vecteur m = u;
    for(int i=n;--i>=0;)
    m(i)=alpha*u(i);
    return m;
}

const Vecteur Vecteur::operator+(const Vecteur& u)const
{
    Vecteur m = *this;
    for(int i=n;--i>=0;)
    m(i)=u(i)+(*this)(i);
    return m;
}

J'espere avoir aide, salut
je suis heureux de faire partie d'une grande famille ...!


samedi 22 décembre 2007 à 22:59:16 | Re : Créer un classe de matrice

kazeton

Je n'ai pas le droit de modifier le .h mais je crois que cela à déjà été implémenté dans le .h



Cette discussion est classé dans : int, const, vecteur, matrice, operator


Répondre à ce message

Sujets en rapport avec ce message

classe matrice [ par pabreto ] bonjour!je dois écrire le matrice.c d'une classe de matrice à partir d'un matrice.h que l'on me donne et que je n'a pas le droit de modifier.voici mes Calcul matriciel [ par ganfoud ] SalutJ'ai créé une classe Vecteur et Matrice, tout marche sauf la surcharge de l'operateur =Voici les bouts qui nous interessent:matrice.hclass Vecteu class matrice [ par flaky ] Slt à tousJ'utilise une classe "matrice" (celle de nicolas aunai, téléchargée sur le site) qui fonctionne très bien. Mais j'ai du mal à manipuler l'ob Help!!! [ par scyrille ] Bonjour,J'essaye de faire deux classes : 1 - une classe vecteur (un tableau unidimensionnel de nombres) (K = float par exemple) :class Vecteur{ public Marche pas : Changer la résolution de l'écran [ par yserver ] Bojours.La réponse sera a prioris toute bête. Je pose qd même mon code qui à passer pour un idiot, mais faut bien avancer.Donc le pb c'est cette fonct prob pour coder fichier sur une matrice [ par Jazz_s ] je voudrais lire un fichier via fstream et ensuite reproduire celui ci parfaitement dans une matrice pour pouvoir jongler facilement par apres avec le Multiplication d'une matrice par un scalaire [ par skrime ] Bonjour, j'ai un exercice à faire qui consiste à multiplier une matrice par un scalaire en C (la prof ne veut pas qu'on se serve des boucles FOR), je matrice*vecteur=vecteur? [ par Arnaud16022 ] petit pb d'operator sur prografix on trouve: X' = A * X X' étant les nouvelles coordonnées du point, X les anciennes et A la matrice de transformat gestion de memoire [ par gyzmo1 ] Salut à tous, j ai un problème de fuite de mémoire, minime mais suffisamment important pour faire planter mon programme lorsque celui ci tourne des he


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



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,203 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é.