begin process at 2012 05 30 01:50:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

problème avec l'affichage d'une classe matrice


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

problème avec l'affichage d'une classe matrice

samedi 18 novembre 2006 à 20:59:03 | problème avec l'affichage d'une classe matrice

laderivier

J'ai recontrer un problème complètement fou à mes yeux en voulant creer un classe matrice, qui effectue des calcul de base sur les matrice.
voilà le code complet :

//---------------------------------------------------------------------------------
//    matrice.h
//---------------------------------------------------------------------------------

class matrice{

    int *tab;      // pointeur sur le tableau représentant la matrice
    int L;         // dimensions effective de la matrice
    int C;
    char *NOM;
    
public:
    
    // definition d'une matrice "vide": L=C=0
    matrice(char *nom);

    ~matrice();
        
    void init(int lignes, int colonnes);

    friend ostream& operator<<(ostream& o, matrice M);
};

//---------------------------------------------------------------------------------
//    matrice.cpp
//---------------------------------------------------------------------------------

#include <iostream>
using namespace std;

#include "matrice.h"

matrice::matrice(char *nom)
{   
    L=0;
    C=0;
    tab=((int *)0);
    NOM=nom;
}

matrice::~matrice()
{
    if(tab!=((int *)0)) delete[] tab;
}

void matrice::init(int lignes, int colonnes)
{
    int i=0;
    if(lignes<=0 || colonnes<=0){       
        L=0; C=0;              // matrice "vide"
    }
    else if(tab!=((int *)0)){        // première initialisation

        C=colonnes;
        L=lignes;
        tab = new int[L*C];
        }
        else{                    // réinitialisation ultérieur avc d'autre dimensions

            delete[] tab;
            L=lignes;
            C=colonnes;
            tab= new int [L*C];

        }

        for(i=0; i<L*C; i++) tab[i]=1;   // on créé une matrice avc que d 1
}

ostream& operator<<(ostream& o, matrice M)
{
    int i,j;
    o<<endl<<M.NOM<<"=";
    for(i=1; i<=M.L; i++){
        o<<"\t";
        for(j=1; j<=M.C; j++)
            o<<M.tab[(i-1)*M.C+j-1]<<"\t";
        o<<endl;
    }

    o<<endl;
    
    return o;
}

//---------------------------------------------------------------------------------
//    main.cpp
//---------------------------------------------------------------------------------


#include <cstdlib>
#include <iostream>

using namespace std;

#include "matrice.h"

int main()
{
    int lignes,colonnes;
    matrice M = matrice("M");
    M.init(3,3);
    
    cout<<M;

    cout<<M;

    cout<<M;

    M.~matrice();

    system("PAUSE");
    return EXIT_SUCCESS;
}

//---------------------------------------------------------------------------------
//    Après avoir compilé, j'obtient ça comme résultat :
//---------------------------------------------------------------------------------


M=      1       1       1     // première affichage ok !
        1       1       1
        1       1       1


M=      0       1       1       // pourquoi la première valeur est modifiée ???
        1       1       1
        1       1       1


M=      4013776 1       1   // est là encore une fois ?
        1       1       1
        1       1       1

Merci d'avance pour votre aide.
samedi 18 novembre 2006 à 21:06:21 | Re : problème avec l'affichage d'une classe matrice

Ombitious_Developper

Réponse acceptée !
Salut:

Pourquoi ce "M.~matrice ()" ?

Le destructeur sera appelé implicitement puisque tu utilises de l'allocation statique, si tu utilises de l'allocation dynamique de la mémoire il faut appeler delete
dimanche 19 novembre 2006 à 14:37:46 | Re : problème avec l'affichage d'une classe matrice

yann_lo_san

Tu organises tes boucles d'affichage en commençant à 1, alors qu'il faut commencer à 0.
De plus tu gagnerais en visibilité en créant une vrai matrice.

Exemple :

class Matrice
{
    int** m_t;
    int   m_nbrLignes;
    int   m_nbrColonnes;
public:
    Matrice(int=3, int=3);
    Matrice(const Matrice&);
    ~Matrice();
    friend Matrice operator * (int, const Matrice&);
    Matrice operator + (const Matrice&) const;
    const Matrice& oprator = (const Matrice&);
    friend istream& operator >> (istream&, Matrice&);
    friend ostream& operator << (ostream&, const Matrice&);
};

// Attrention au constructeur de copie !
Matrice::Matrice(const Matrice& matCopie)
{
    m_nbrLignes = matCopie.m_nbrLignes;
    m_nbrColonnes = matCopie.m_nbrColonnes;
    m_t = new int*[m_nbrLignes];
 
    for(int i=0; i<m_nbrLignes; i++)
    {
        m_t[i] = new int[m_nbrColonnes];
           for(int j=0; j<m_nbrColonnes; j++)
               m_t[i][j] = matCopie.m_t[i][j];
    }
}

// ect...

dimanche 19 novembre 2006 à 14:43:30 | Re : problème avec l'affichage d'une classe matrice

yann_lo_san

En fait le bug vient d'ici :

o << M.tab[(i-1) * M.C + j-1] << "\t";

pour chaque J tu es toujours a 0, donc tu affiches toujours la premiere case.

vendredi 24 novembre 2006 à 22:46:25 | Re : problème avec l'affichage d'une classe matrice

laderivier

merci, d'vaoir ajouter quelque infos supplémentaire sur l'amélioration mon code.

Malheureusement je suis un débutant en C++ (j'en fait que depuis 2 mois), et donc je viens à peine de voir la notion de classe, ce qui fait que je ne vois pas très bien le sens de "vraie matrice", mais n'empêche que je vais essayer de comprendre ce que tu me propose.

Pour la critique sur l'affichage en commençant à 1 et non pas à 0, c'est pour que mes matrices puissent être utilisées avec la terminologie mathématique qui nomme le premier élément M[1][1] et non pas M[0][0]. (ce qui facilite le passage des "astuces" en maths aux "astuces" en info).

Si g bien compris l'utilité du for.
   for(j=1; j<=M.C; j++)
      o << M.tab[(i-1) * M.C + j-1] << "\t";
Ce bout de code implique que j varie.



Cette discussion est classée dans : int, lignes, tab, colonnes, matrice


Répondre à ce message

Sujets en rapport avec ce message

Multiplication matrice [Matrice c++] [ par joshua69 ] Bonjour, je dois réaliser un algorithme utilisant la méthode de Cholesky pour la décomposition en matrice L.Lt. voici mon code: #include #include Puissance 4 en C [ par drinky05 ] Bonjour, j'aurai besoin d'aide pour mon programme, grand débutant, c'est pour un projet en cours, je dois réaliser un puissance 4, il fonctionne a peu DLL C++ [ par alonsyl ] Bonjour,Je travaille en Visual Basic et j'essaie de créer une DLL C++ afin d'effectuer du calcul matriciel. Pour l'instant, je commence petit avec la Manipulation de matrices en C. [ par T TeKa K ] Hello les gens! Je viens quemander de l'aide afin de me sortir de ce programme qui me prend la tete. But de l'exericice: creer un programme qui m 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 copier une matrice [ par diable007 ] bonjour,j'ai besoin de copier une matrice dans une autreexemple copier cette matrice d'ordre 21110dans une matrice d'ordre 4 donc copier 4 fois cette mots clés associés à pc : boite noire, mystique, vaudou, paranormal, magie etc... [ par Loki6 ] Salut à tous, voici un petit bout de code bizarre : bool CAppLocalizeDlg::ClassInfosTable(char ** tab, int nb){ New pour argument formel [ par goutbouyo ] Salut,J'ai une petite question concernant les pointeurs :J'ai une fonction qui alloue de la mémoire à un pointeur passé en paramètre :void CreeTableau Probleme de fonction sur la bataille navale... [ par YASS_95 ] Bonjour à tous, Je travaille sur un projet qui est le jeu de la bataille navale et j'ai un petit probleme de fonctions... je vais vous expliquer. J'a probleme a la creation d'une dll [ par anthonycosson ] salut a tous donc voila mon probleme, j'ai fait une classe et ensuite j'ai voulu la mettre en dll mais lorsque je compile cette erreur la s'affiche qu


Nos sponsors


Sondage...

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 : 1,108 sec (4)

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