IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probl�mes sur op�rations simples sur des matrices


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 15
    Par d�faut Probl�mes sur op�rations simples sur des matrices
    Bonjour � tous,

    J'ai fait une classe matrice et j'ai surcharg� l'op�rateur * afin de multiplier 2 matrices, le voil� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    matrice matrice::operator*(const matrice &m1)
    {
     matrice result(ligne,m1.colonne);
     
     if(colonne == m1.ligne) // si nb colonnes = nb lignes de l'autre matrice
     {
      for(int i=0;i<ligne;i++) //pour chaque ligne
      {
       for(int j=0;j<m1.colonne;j++) // pour chaque colonne
       {
        for(int k=0;k<colonne;k++) // produit scalaire
         result.mat[i][j] += mat[i][k]*m1.mat[k][j];
       }
      }
     }
     else
     {
      cout<<"Matrices incompatibles,operation impossible !"<<endl;
     }
     
       return result;
    }


    J'ai �galement surcharg� l'op�rateur << d'affichage qui marche tr�s bien (je l'ai test�), mais quand je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    cout<<"m1 * m2 = "<<(m1*m2)<< endl;
    cout<<endl;*/
    Rien ne s'affiche. J'ai essay� plusieurs choses, mais je n'arrive pas � comprendre pourquoi cela ne veut pas marcher !

    J'ai fait une surcharge de l'op�rateur = :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    matrice &matrice::operator=(matrice &m1)
    // Affectation d'une matrice à une autre
    {
     int i,j;
     
     if(&m1 != this)
     {
      for(i=0;i<ligne;i++)
      {
       for(j=0;j<colonne;j++)
       {
        mat[i][j] = m1.mat[i][j];
       }
      }  
     }
     else
     {
      cout << "(matrice) Erreur d\'affectation !" << endl;
     }
     return *this;
    }
    et mon constructeur initialise � 0 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    matrice::matrice(int lig, int col)
    // constructeur
    {
     for (int i=0;i<lig;i++)
     {
      for (int j=0;j<col;j++)
      {
       mat[i][j]=0;
      }
     }
     
     ligne   = lig;
     colonne = col;
    }
    mais ce qui est bizare c'est que quand je fais un affichage dans ma fonction * juste avant le return, �a me met bien la matrice attendue.

    Merci d'avance pour votre aide.

    Ajout des balises [code] par khayyam90

  2. #2
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Tu devrais :
    1/
    2/ V�rifier ton constructeur de copie, et tant qu'� faire nous donner la d�claration de ta classe - �a peut aider.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    15
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 15
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #define MAX_LIGNE 50
    #define MAX_COLONNE 50
     
    class matrice
    {
     
    private :
    	int ligne;
    	int colonne;
    	int mat[MAX_LIGNE][MAX_COLONNE];
     
    public:
    	// Constructeurs
    	matrice(int =3,int =3);
    	matrice(const matrice & );
     
    	// Accesseurs
    	int getLigne();
    	int getColonne();
     
    	// Opérations
    	void matrice_transposee(matrice );
    	int matrice_inverse();
    	void matrice_identite(int=1);
    	void permutation();
    	void remplirMatrice();
    	void inverserLignes(int,int);
     
    	// Surcharges d'opérateurs
    	matrice operator*(const matrice &);
    	matrice & operator=(matrice &);
    	friend ostream & operator<<(ostream &,const matrice &);
     
     
     
    };

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Dans le d�sordre:
    a- il manque quantit� de const
    b- le test d'auto-affectation est un contre-idiome (nominalement, il fait perdre plus de temps qu'en gagner (i.e. c'est une pessimisation) ; on l'utilisait principalement quand il y avait des r�allocations � faire ; il ne r�gle rien en cas d'exception ; la solution exception-safe r�gle le probl�me que le test d'auto-affectation r�glait) FAQ!
    c- Tu ne te serais pas plant� sur ton constructeur de recopie (l'op�ration utilis�e en retour du r�sultat) ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Citation Envoy� par catmary
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #define MAX_LIGNE 50
    #define MAX_COLONNE 50
     
    class matrice
    {
     
    private :
    	int ligne;
    	int colonne;
    	int mat[MAX_LIGNE][MAX_COLONNE];
    C'est pas terrible du tout �a, ces macros.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    	matrice(const matrice & );
    A priori tu n'as pas besoin de surcharger ton constructeur.
    Celui par d�faut ira tr�s bien.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	// Opérations
    	void matrice_transposee(matrice );
    	int matrice_inverse();
    	void matrice_identite(int=1);
    	void permutation();
    	void remplirMatrice();
    	void inverserLignes(int,int);
    D�j�, on constate des conventions diff�rentes pour la s�p�ration des mots dans les noms des fonctions.
    Ensuite, tu es d�j� dans une classe matrice, pas besoin de rajouter matrice dans le nom des fonctions membres.

    L'auto-affectation doit toujours �tre possible.
    Dans ton cas, tu n'as pas besoin de diff�rencier les cas, et surtout, pas besoin d'afficher "Erreur d'affectation" sur la sortie standard.

    Pense � surchager l'op�rateur () pour donner l'acc�s aux lignes et aux colonnes plut�t de passer par une variable membre qui est un tableau de tableaux.

    Je ne vois pas ce qui pourrait causer le probl�me, par contre.
    Fournis un exemple r�duit qui compile pas mais ne produit pas le r�sultat escompt�.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 05/09/2014, 22h42
  2. [TPW] Op�rations simples sur les fractions
    Par forum dans le forum Codes sources � t�l�charger
    R�ponses: 0
    Dernier message: 16/11/2011, 20h43
  3. R�ponses: 2
    Dernier message: 25/08/2011, 23h01
  4. Op�rations simple pour des variables
    Par anayathefirst dans le forum Jasper
    R�ponses: 8
    Dernier message: 31/03/2008, 11h57
  5. R�ponses: 3
    Dernier message: 16/02/2007, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo