begin process at 2012 05 28 23:40:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Créer un classe de matrice


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Créer un classe de matrice

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 Administrateur CodeS-SourceS
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ée 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 surcharges des operators [ par leroiloup ] salut a tout j'ais un probleme d'implementer les deux operator (operator+, operator*) et comment l'etuliser dans main() #include #include using names VC++ 6 /recompilé sur VC++ 2005 [ par lui88 ] Bonjour , j'essai de recompilé mon programme sur VC++ 2005 , mais plein d'erreur s'affiche :s. j'en est reglé une grande partie mais là je n'y arrive operator[] [ par lovo ] Salut, je créer une classe matrice en ce moment avec comme data member un double**. Je n'arrive pas a faire l'opérateur d'acces à ma matrice [code=cp 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales