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ème de matrice


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut problème de matrice
    Bonjour à tous et à toutes.
    Voila je suis en train de développer une application pou gerer les graphes, parcours, affichage ajout de noeud, colorisation, et tout le tointoin.

    Pou ce faire, j'ai une classe matrice (.h et .cpp) , et une classe abstraite graphe dont dérive DGraph et Ugraph, pour des graphes orientés ou non orientés.

    Bon bref cela ne vous interesse pas grandement mais je voulais vous mettre dans le bain.
    Dans ma classe matrice j'ai deux méthodes qui me sont fort utiles mais qui malheuresement ne fonctionne pas .

    En fait ces méthodes me permettent d'ajouter une/des ligne(s) ou une/des colonne(s) à ma matrice (ce qui correspond à l'ajout d'un ou plusieurs noeuds à mon graphe.)
    Bref, ce que je fais dans la méthode addLigne par exemple est simple.
    Ma matrice contient un tableau à deux dimension appelé Elem en int ** .
    Dans la méthode, j'allou un int ** elem2 , que je mets aux bonnes dimensions
    donc avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    elem2 = new int *[nouvellevaleurligne];
     
    une tite boucle ou à chaque tour je fais
     
    elem2[i] = new int[colonne];
    et ou je met les elements de elem[i][j] dans elem2
    jusque la pas de soucis
    je fais une autre boucle pour mettre toutes les cases non remplies de elem2 à 0 et voili.
    ça ça fonctionne parfaitement.
    En fait vous allez rire c'est juste la derniere ligne qui déconne ^^
    Quand je fais : elem = elem2
    et la oui ça ne fonctionne pas .

    J'aimerais en fait que mon élément de départ devienne le elem2 vu que ma matrice dois devenir ce elem2, mais ça manque de bol ça ne fonctionne pas .

    J'ai essayer de supprimer elem , de le recreer à la bonne dimension de copier les elements de elem2 dedant et de supprimer elem2 mais ça ne fonctionne pas non plus.

    Donc ma question est simple, comment dois je faire?

    Je veux juste copier elam2 dans mon elem de base (créer en private dans le .h ) est ce que vous avez une idée?
    Je vous en remercie d'avance.
    Désolé de ne pas mettre plus de code mais je n'est internet que sur un des deux pc, et manque de bol, c'est sur l'autre que je programme. Si jamais il vous faut plus de code, dites moi le, je ferais chauffer ma usb key
    Encore une fois merci, et bonne année à vous

    Michael.

  2. #2
    Membre habitué Avatar de galak63
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 146
    Points
    146
    Par défaut
    tu veux faire une copie des valeurs ou bien des pointeurs ?
    Le plus dur dans la mort, c'est qu'on loupe l'apéro ...
    www.usirugby.rf.lv

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    bah une copie sera très bien

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Application professionnelle ou exercice ?
    Avec les new, tu as choisi le 2nd chemin le plus compliqué pour gérer des redimensionnements dynamiques de tableaux.
    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
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    un peu des deux en fait, vu que c'est un projet à rendre pour la fac.. donc exercice mais couplé à un travail sérieux..

    Mais la voie compliquée ne me dérange pas, c'est en faisant ce genre de choses que l'on apprend et à vrai dire on à tjs vu avec les new donc ...

    Petite précision, je ne souhaite pas utiliser de vecteur pour ce cas, formellement interdit pour notre petit exercice

    J'espère que vous aurez un peu de temps pour m'expliquer ce qui cloche ..
    Merci d'avance encore une fois

  6. #6
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Ben la c'est difficile de voir ce qui va pas.
    Ce serait bien de voir le code.
    b Oo

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Le problème est que la voie compliquée est la voie lemmings : beaucoup font comme ça et au final se jettent du haut de la falaise comme les autres. C'est la voie cauchemardesque à développer, stabiliser, rendre robuste, et maintenir. Ceci dit, pour les matrices, utiliser une autre voie que celle là quand on ne veut pas utiliser des types prédéfinis comme ceux de boost.uBLAS, Blitz++, ..., est plutôt bancale.

    Bref. Quelle solution ?
    a- un seul buffer alloué pour une meilleure utilisation de la mémoire ?
    b- une allocation par ligne, plus une pour le tableau référençant les lignes ? -> FAQ

    Avec b-, si tu redimensionnes le nombre de colonnes, la solution simple est très certainement de jouer avec le swap (exactement comme pour définir l'opérateur d'affectation) : tu crées une nouvelle matrice temporaire nommée aux nouvelles dimensions, tu recopies dedans ce qui doit l'être. Et tu conclues par un swap avec this.

    Avec b-, si tu redimensionnes le nombre de lignes, on peut procéder comme précédemment, mais c'est optimisable. Il suffit de créer un nouveau tableau de lignes, temporaire et nommé, de le remplir, de détruire l'ancien tableau de lignes de *this (et surtout pas les lignes), et d'affecter le temporaire nommé à this->m_lignes. L'ordre que je donne, et l'utilisation de temporaires nommés n'est pas sorti d'un chapeau => FAQ::RAII.

    Après, il est possible d'optimiser diverses manips si tu réduis les dimensions plutôt que de les agrandir.
    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...

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Merci luc, encore une fois ton aide m'a été précieuse.
    En revanche j'ai juste une petite erreur et je dois avouer qu'après ne pas avoir dormi de la nuit je ne me suis pas foulé.
    Pour le swap j'ai juste fais this = elem2 (elem2 étant ma matrice temporaire)
    Forcement il à une erreur .

    Je sais que this pointe directement sur une adresse, mais le soucis c'est qu'on m'a tjs dis qu'elle n'étais pas modifiable .. Alors je ne sais pas trop comment faire..

    Est ce que tu pourrais juste m'indiquer ce que je dois faire pour modifier mon this, c'est vrai que ça j'ai jamais très bien compris comment faire.
    Désolé d'etre aussi mauvais, mais grace à toi déjà j'ai acquis une autre façon de voir la chose
    Merci encore.

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    En attendant que la nouvelle version de la FAQ soit soit disponible -- car il me semble que c'est traité (impossible de remettre la main sur l'adresse ), tu peux jeter un oeil sur GOTW -> http://gotw.ca/gotw/059.htm
    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...

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    merci
    je vais lire attentivement cela
    (t'a de la chance que je sois fortiche en anglais hein, lol t'aurais pu trouver un truc en français ^^ non je rigole c'est très bien, vive l'anglais, on devrais arreter de traduire pour les non anglophone tien )

    Merci encore pour ton aide..

Discussions similaires

  1. [Débutant] Problème bouclage matrice
    Par gdumouli dans le forum MATLAB
    Réponses: 8
    Dernier message: 09/02/2009, 18h48
  2. [Débutant] Problème création matrice de rigidité
    Par sylvain1001 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/12/2008, 16h42
  3. [Fortran 77] Problème de matrice
    Par info! dans le forum Fortran
    Réponses: 23
    Dernier message: 14/12/2008, 22h44
  4. Divers problèmes de matrice passant de numpy a scipy
    Par thance dans le forum Calcul scientifique
    Réponses: 25
    Dernier message: 12/06/2007, 23h33
  5. Problème de matrice
    Par anasTelecoms dans le forum MATLAB
    Réponses: 1
    Dernier message: 27/05/2007, 10h55

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