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 :

[C++] Probleme tableau


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Par défaut [C++] Probleme tableau
    Bonjour,

    Je possede une classe SimEvent construite comme suit:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    class SimEvent{
               public:
    	// Enumeration of simulation event type
    	enum Type {...};
     
    	// Constructor & destructor
    	SimEvent(){}
    	SimEvent(const SimEvent& s){operator = (s);}
    	~SimEvent(){}
     
    	// Operator
    	void operator = (const SimEvent& s){}
    	bool operator < (const SimEvent& b) const{}
     
    	// Set functions
    	void setTau(double a_tau){}
    	void setEndTau(double a_endTau){}
    	void setDT(double a_dt){}
    	void setType(Type a_type){}
    	void setId(wstring a_id){}
    	void setIdx(unsigned int a_idx){}
     
    	void addEntity(Entity* a_entity){}
     
    	void setAbsAmount(bool a_absAmount){}
    	void setDimensionality(unsigned int a_dimensionality){}
    	void setEntityName(wstring a_entity){}
    	void setCompartmentName(wstring a_compartmentName){}
    	void setTimeseriesID(unsigned int a_timeseriesID){}
    	void setTimeseriesEnd(bool a_timeseriesEnd){}
    	void setConstraint(Expression a_expr){}
    	void setIsDynamicConstraint(bool a_isDynamicConstraint){}
     
    	// Get functions
    	wstring getId(){}
    	unsigned int getDimensionality(){}
     
             //private:
    	// Execution time
    	double m_tau;
    	double m_endTau;
    	double m_dt;
     
    	// Simulation event type
    	Type m_type;
     
    	wstring m_id;
     
    	// Vector of entity index
    	vector<Entity*> m_entityVector;
     
    	// Constraint element
    	Expression m_constraint;
    	bool m_isDynamicConstraint;
     
    	// Request for absolute amount 
    	bool m_absAmount;
     
    	// Dimension of the compartment
    	unsigned int m_dimensionality;
     
    	// Parameter / constraint / expression idx
    	unsigned int m_idx;
     
    	// EntityName
    	wstring m_entity;
     
    	// Compartment
    	wstring m_compartmentName;
     
    	// Time serie element
    	unsigned int m_timeseriesID;
    	bool m_timeseriesEnd;		
    };
    Ensuite dans une autre classe, je cree un tableau de 5000 elements de SimEvent:

    Lorsque je compile le programme, il ne semble pas y avoir de probleme.
    Par contre, lorsque je l'execute, j'ai une fenetre d'erreur windows qui apparait (j'utilise CodeWarrior pour programmer et Windows XP).

    Si je fais le debug pas a pas de Code Warrior, il me trouve une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stack Overflow at address 0x453832
    qui semble etre lie a la class C++ stackall.c

    J'ai ensuite essaye de tester la meme chose avec un tableau de taille 10 et dans ce cas la, cela fonctionne correctement.

    A quoi cela peut etre du? Est ce un probleme de capacite memoire maximum pour un tableau? Que puis je faire pour resoudre ce probleme.

    Merci d'avance pour votre aide,

    Yann

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ton tableau est tros gros pour être stocké sur la pile. Utilise un tableau dynamique, et mieux encore, std::vector.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<SimEvent> m_heap( 5000 );

  3. #3
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Par défaut
    Merci pour ces renseignements.
    Le but de mon tableau est de pouvoir trier les simevents par ordre croissant defini par l'operator <.
    Est ce qu'avec un vecteur je pourrais aussi intervertir les elements comme dans un tableau?

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Haha... beaucoup mieux, tu peux trier ton tableau avec une ligne de plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::sort( m_heap.begin(), m_heap.end() );
    Et voilà. Vive la STL!

  5. #5
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Par défaut
    Merci pour ton aide

    Le probleme du sort est que ce serait trop long a faire.
    En fait, on cherche a simuler a l'aide de ce tableau un arbre binaire, on a donc sur le tableau une fonction PercolateUp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void SimEventPriorityQueue::percolateUp(const SimEvent& a_element, unsigned int a_pos){
    	unsigned int pos = a_pos;
     
    	// Percolate up
    	while(pos > 0 && (a_element < m_heap[(pos-1)/2])){
    		// The element is smaller than its parent, so push down the parent and move the hole
    		m_heap[pos] = m_heap[(pos-1)/2];
    		pos = (pos-1)/2;
    	}
    	// Found location: insert element
    	m_heap[pos] = a_element;
    }
    Je pense que ca va fonctionner aussi un vecteur. Non?

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Oui un vecteur ça s'utilise comme un tableau classique. Quel est le but de ton arbre binaire ?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Par défaut
    Le but de mon arbre binaire est d'avoir a chaque fois en premier position l'element le plus petit sans avoir necessairement toute la liste triee, car a chque cycle d'execution, on execute le premier element, puis on le met a jour et on doit ensuite le repositionner dans la liste donc ce serait trop long si on faisait un sort de la liste a chaque fois.
    Merci pour tes infos et tes conseils

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    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 287
    Par défaut
    Avec un set, tu retires l'élément et tu le réinjectes après modification de son critère (pourle tri).
    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...

  9. #9
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Et pourquoi pas carrement faire uen simple recherche du plus petit (min_element) ? Car d'après ton algo, si j'ai bien compris, tu as un tableau de taille 2^n pout n éléments à stocker...

  10. #10
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 47
    Par défaut
    J'ai un tableau de taille 2^n et 2^n elements a classer.
    L'algorithme optimal est celui utilise avec arbre binaire car pour placer un element on a au plus n permutations a effectuer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme tableau 2 dimensions
    Par EmilyRose dans le forum C++
    Réponses: 2
    Dernier message: 09/10/2006, 18h20
  2. probleme : tableau & mise en forme
    Par grumly22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 03/04/2006, 22h53
  3. [Conception] problème tableau 2 dimensions
    Par Tootsi dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/01/2006, 18h55
  4. probleme tableau
    Par semaj_james dans le forum C
    Réponses: 3
    Dernier message: 24/11/2005, 11h55
  5. [Tableaux] Probleme tableau
    Par chocobos dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 11h34

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