begin process at 2008 07 06 12:59:53
1 205 545 membres
122 nouveaux aujourd'hui
14 119 membres club

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 !

MODULE DE GESTION DE MATRICE


Information sur la source

Catégorie :Maths & Algorithmes Niveau : Débutant Date de création : 22/07/2004 Date de mise à jour : 23/07/2004 21:22:59 Vu / téléchargé: 4 408 / 521

Note :
Aucune note

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Mon module permet de gérer les matrices dans un projet. La classe Matrice est présent ci-dessous et j'aimerais connaitre votre sentiment par rapport a la facon dont c'est implemente et si la classe est assez exhaustive ou non.
Je suis debutant et ceci est mon tout premier proj C++. Merci de m'aider...

Source

  • #ifndef MATRICE_HPP
  • #define MATRICE_HPP
  • typedef double * Matrix;
  • class Matrice
  • {
  • public:
  • Matrice(int, int);
  • Matrice(Matrice &);
  • ~Matrice();
  • void GetMatrice();
  • void Fill();
  • int GetRows() { return P; }
  • int GetLines() { return N; }
  • int GetDimension() { return N*P; }
  • friend Matrice operator + (Matrice, Matrice);
  • friend Matrice operator - (Matrice, Matrice);
  • friend Matrice operator * (Matrice, Matrice);
  • friend Matrice operator * (double , Matrice);
  • friend Matrice operator ^ (Matrice, int );
  • friend bool operator == (Matrice, Matrice);
  • void Display() ;
  • void Transpose();
  • void Inverse() ;
  • void Zero() ;
  • void Identity() ;
  • private:
  • int N, P;
  • Matrix XxMatrice;
  • };
  • #endif
#ifndef MATRICE_HPP
#define MATRICE_HPP

typedef double * Matrix;

class Matrice
{
    public:
        Matrice(int, int);
        Matrice(Matrice &);
        ~Matrice();
        
        void GetMatrice();
        void Fill();
        int  GetRows()      { return P;   }
        int  GetLines()     { return N;   }
        int  GetDimension() { return N*P; }
        
        friend Matrice operator +  (Matrice, Matrice);
        friend Matrice operator -  (Matrice, Matrice);
        friend Matrice operator *  (Matrice, Matrice);
        friend Matrice operator *  (double , Matrice);
        friend Matrice operator ^  (Matrice, int    );
        friend bool    operator == (Matrice, Matrice);
        
        void Display()  ;
        void Transpose();
        void Inverse()  ;
        void Zero()     ;
        void Identity() ;
        
    private:
        int N, P;
        Matrix XxMatrice;
};

#endif
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

23 juillet 2004 21:21:14 :
.
23 juillet 2004 21:22:59 :
ajout
  • signaler à un administrateur
    Commentaire de djl le 22/07/2004 23:56:51

    pour un debut c'est bien

    delete[] XxMatrice; et pas delete XxMatrice; sinon ca fuie

    et si tu rajoute l'operateur =, ta classe sera vraiment securisée

    pour la methode display, elle necessite std::cout de iostream et ca peut etre genant, surtout pour un moteur 3d ou ca n'a rien à faire

    met la en inline  et fait generer le code seulement si iostream est inclu

    // dans le corps
    #ifdef _CPP_IOSTREAM
    inline void Display() ;
    #endif

    // dans le fichier .hpp, apres le corps
    #ifdef _CPP_IOSTREAM
    inline void Matrice::Display()
    {
        for(int i=0; i<P; i++)
          {
            for(int j=0; j<N; j++)
              cout << XxMatrice[i*P+j] << ' ';
            cout << endl;
          }
    }
    #endif

    en c++ ==> #include <ctime> et non time.h

    a par ca je trouve que c'est bien codé, surtout si tu debute

    j'avaiss deja posté une classe matrice generique si ca t'interesse

  • signaler à un administrateur
    Commentaire de Kirua le 23/07/2004 00:35:00

    faudrait calculer les déterminants et les rangs, et ça serait encore mieux ^^

  • signaler à un administrateur
    Commentaire de shen le 23/07/2004 00:45:38

    merci djl pour tes commentaires, tres utiles.
    sinon, j'ai pas tres bien comprit la subtilite qui fait que l'utilisation de "std::cout" n'est pas conseille pour l'affichage. Pour un moteur 3D, c'est ok, sinon....pourquoi?

  • signaler à un administrateur
    Commentaire de Kirua le 23/07/2004 00:49:39

    le truc d'éviter l'utilisation de la sortie standard dans un module, c'est que tu n'utiliseras pas forcément ta classe dans un programme qui en fera usage (de la sortie console), et que donc ce serait dommage de devoir inclure la bibliothèque iostream ds ton programme pour pvr utiliser la classe de matrices, sans en avoir l'usage (parce que iostream bouffe plein de place ds l'exe).

  • signaler à un administrateur
    Commentaire de shen le 23/07/2004 00:53:10

    dans ce cas, comment faire pour afficher du texte sans utiliser iosream?

  • signaler à un administrateur
    Commentaire de Kirua le 23/07/2004 00:58:16

    ben, justement, dans un moteur 3D tu t'en ficherais pas mal d'afficher la matrice dans la console (sauf pr le débuggage), puisque ce qui t'intéresserais ne serait pas le contenu de la matrice (pr une résolution de problèmes, comme une calculatrice), mais bien son utilisation pratique interne au moteur (calcul des perspectives, de la lumière etc, ça me dépasse de tte façon, mais je sais que ça trouve un usage là dedans), et pour cela tu n'aurais besoin à aucun moment d'afficher le contenu de la matrice, et c'est pr cela qu'il est bien d'isoler cette fonction du module, tt en le rendant "activable" à la compilation, soit pr débug, soit pr l'utilisation première que tu en as je suppose, qui est le calcul matriciel en tant que tel.

  • signaler à un administrateur
    Commentaire de BruNews le 23/07/2004 01:54:58 administrateur CS

    shen > il y en a beaucoup de texte devant toi en ce moment et pourtant pas l'ombre d'une console.
    Evite de penser console systematiquement, a part pour du debug comme dit Kirua, on en voit plus trop l'utilite.

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 08:03:46

    shen > kirua te l'a bien expliquer, si tu veux afficher ta matrice dans la console, utilise cout, mais il faut que ce soit separé de ton module (dans une fonction externe à ton module)
    sinon tu limite gandement les possibilité d'utilisation de ton module

  • signaler à un administrateur
    Commentaire de Iwin le 23/07/2004 14:05:53

    Euh, c'est cool mais comment tu fais pour initialiser une matrice avec les valeurs que tu veux ?

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 19:13:12

    a oui c'est vrai, ca rend ta classe peu fonctionnel

    rajoute des constructeur permettant l'initialisation

    http://www.cppfrance.com/code.aspx?ID=22840

  • signaler à un administrateur
    Commentaire de shen le 23/07/2004 20:41:04

    j'ai pas encore terminé! si vous regarde dans les fonctions membres, certaines ne sont pas encore implementees. La fonction qui permet de remplir une matrice avec les valeurs de l'utilisateur est Matrice::GetMatrice().
    Ceci dit, il est preferable d'en faire une fonction membre ou non, c'est a dire d'entrer les valeurs a l'initialisation?

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 20:45:25

    si tu compte utiliser des cin (iostream) vau mieux pas que ce soit une fonction membre (pour les memes raisons que pour display)
    le plus simple c'est des constructeurs prenant en parametres des tableau, des vector, des valarray... pour permettre  diverses initialisations

    par exemple

    Matrice( int, int, double *);

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 20:48:23

    pense aussi à utiliser un type non signé ou un size_t pour les dimensions, c'est fait pour


    class Matrice
    {
        public:
         typedef std::size_t size_type;
            ...
        private:
           size_type N, P;
            Matrix XxMatrice;
    };

  • signaler à un administrateur
    Commentaire de shen le 23/07/2004 21:04:11

    djl > j'ai rajoute l'operateur = comme tu m'avais dir mais j'ai un prob...quand j'ecrit par exemple pour deux matrices a et b :
    a = a+b, ou a = a*b....
    c'est cette erreur a la compilation :
    no match for 'Matrice& = Matrice' operator.
    par contre si j'ecrit : a = b;
    c'est correct...
    ??? bizarre, j'ai pourtant bien les bons operateurs definis...

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 21:20:09

    comment tu as declaré l'operateur = ?

    met à jour le zip pour voir

  • signaler à un administrateur
    Commentaire de shen le 23/07/2004 21:23:24

    c ok!

  • signaler à un administrateur
    Commentaire de djl le 23/07/2004 21:49:32

    Matrice& operator =  (const Matrice &);

    dur à voir, c'est canonique, le compilo cherchait cette declaration pour l'operateur interne d'affectation

    il te manque aussi le constructeur par defaut, et ca c'est tres important, a partir du moment ou tu redefini un constructeur, tu doit redefinir egalement celui par defaut (sans parametre)

    ca peut etre aussi bien

    Matrice();

    que

    Matrice( int = 5, int = 5, int = 0);

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS