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

VC++ .NET Discussion :

[C++ .NET] Structure dynamique


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut [C++ .NET] Structure dynamique
    Bonjour

    J'ai un nouveau probl�me :-(

    Le but de ce programme doit �tre la gestion d'une structure dynamique de type FIFO (First In First Out).

    L'erreur que j'obtient est une exception NULL reference dans la proc�dure retraitFile � cette ligne

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    	mazda_tete = *ptra.elemProch;
    donc je suppose que ptra.elemProch est NULL et donc que ma proc�dure ajoutFile n'est pas bonne mais je ne vois pas ou (ca fait 1 semaine que je bloque la dessus).



    Form1. CPP

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    	struct bloc
    	{
    		int nombre;
    		struct bloc *elemProch;
    	};
    	typedef struct bloc file;
    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
    75
    76
     
    #include "stdafx.h"
    #include "Form1.h"
    #include <windows.h>
    #undef MessageBox;
     
    using namespace file_tableau;
     
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
    	System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
    	Application::Run(new Form1());
    	return 0;
    }
     
    System::Void Form1::Form1_Load(System::Object *  sender, System::EventArgs *  e)
    {
    	file tete, queue;		
     
    	ajoutFile(tete, queue, 1);
    	MessageBox::Show(Convert::ToString(tete.nombre));
    	ajoutFile(tete, queue, 2);
    	MessageBox::Show(Convert::ToString(queue.nombre));
    	ajoutFile(tete, queue, 3);
    	retraitFile(tete, queue);
    	MessageBox::Show(Convert::ToString(queue.nombre));
    }
     
    void Form1::initFile(file& mazda_tete,file& mazda_queue)
    {
    	mazda_tete.elemProch = NULL;
    	mazda_queue.elemProch = NULL;
    }
     
    bool Form1::fileVide(file mazda_tete)
    {
    	if(!(mazda_tete.elemProch))
    	{
    		return true;
    	}
    	else
    	{
    		//MessageBox::Show("File NON VIDE");
    		return false;
        }
    }
     
    void Form1::ajoutFile(file& mazda_tete, file& mazda_queue, int donnee)
    {
    	file* ptra;
    	ptra = new(file);
    	ptra->nombre = donnee;
     
    	if(fileVide(mazda_tete))
    	{
    		mazda_tete = *ptra;
    		mazda_queue.elemProch = NULL;
    	}
    	else
    	{
    		mazda_queue.elemProch = ptra;
    		mazda_queue = *ptra;
    	}
    	//MessageBox::Show(Convert::ToString(mazda_tete.nombre));
    }
     
    void Form1::retraitFile(file& mazda_tete, file& mazda_queue)
    {
    	file ptra;
    	ptra = mazda_tete;
    	mazda_tete = *ptra.elemProch;
    	delete(&ptra);
    }
    Si quelqu'un voit ou ca cloche ... merci d'avance

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par d�faut
    heu, j'ai pas tout compris qu code (je ne fais que du vb.net)

    neamoins sache que le framework dispose de collections qui pourraient grandment t'aider
    System.Collections.Queue c'est FIFO
    System.Collections.Stack c'est LIFO

    http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemcollectionsqueueclasstopic.asp

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    arf moi non plus je ne comprend pas tout

    Mon ch�re professeur nous obligent � tout coder nous m�mes donc pas de truc tout fait comme le propose .NET pour nous simplifier la vie : comment se faire ch*** pour rien et r�inventer la roue

    Bref je n'ai pas le choix je doit utiliser des pointeurs etc et ne pas utiliser de m�thode "toute faite".

    <desesperated>Quelqu'un peux m'aider </desesperated>

  4. #4
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par d�faut
    bah tu peux toujours utiliser reflector pour savoir comment c'est fait avec des arrays dans le framework

    http://www.aisto.com/roeder/dotnet/

    c'est pas de la triche: c'est de l'etude

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    nan franchement je ne peut pas le prof � donner un cadre c'est comme ca et pas autrement snif snif

    sinon j'aurai d�ja utiliser la mani�re pr�concue du .NET c'est tellement plus simple et rapide :o

    En attendant qu'un codeur C++ passe par la

  6. #6
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut Re: [C++.NET] Structure dynamique
    Citation Envoy� par tidou
    Le but de ce programme doit �tre la gestion d'une structure dynamique de type FIFO (First In First Out).
    Il y a quelques probl�mes avec l'algo :)

    J'ai quelques questions en cours de route, parce que c'est pas super clair :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    System::Void Form1::Form1_Load(System::Object *  sender, System::EventArgs *  e)
    {
    	file tete, queue;		
     
    	ajoutFile(tete, queue, 1);
    	MessageBox::Show(Convert::ToString(tete.nombre));
    	ajoutFile(tete, queue, 2);
    	MessageBox::Show(Convert::ToString(queue.nombre));
    	ajoutFile(tete, queue, 3);
    	retraitFile(tete, queue);
    	MessageBox::Show(Convert::ToString(queue.nombre));
    }
    'queue' c'est cens� �tre quoi ? Le dernier �l�ment de la liste ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    void Form1::initFile(file& mazda_tete,file& mazda_queue)
    {
    	mazda_tete.elemProch = NULL;
    	mazda_queue.elemProch = NULL;
    }
    Cette m�thode n'est jamais appel�e, et j'ai toujours du mal � voir la relation entre tete et queue.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void Form1::ajoutFile(file& mazda_tete, file& mazda_queue, int donnee)
    {
    	file* ptra;
    	ptra = new(file);
    Probl�me potentiel ici, le pointeur vers elemProch n'est pas initialis�. Et il ne vaut pas null (plus pr�cis�ment, il vaut 0xcdcdcdcd d'apr�s mon debuggueur :)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    	ptra->nombre = donnee;
     
    	if(fileVide(mazda_tete))
    	{
    		mazda_tete = *ptra;
    		mazda_queue.elemProch = NULL;
    L� tu �crases le contenu de tete, avec donc un pointeur vers elemProch. Et je ne vois toujours pas ce que vient faire queue l�-dedans :)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    	}
    	else
    	{
    		mazda_queue.elemProch = ptra;
    		mazda_queue = *ptra;
    	}
    L� si je suis le principe de fonctionnement hypoth�tique, tu veux faire pointer le dernier �l�ment de la liste vers celui que tu viens de cr�er, et ensuite tu veux d�caler ta variable queue qui serait cens�e pointer sur le nouveau dernier �l�ment. J'ai bon ?
    Parce que l� ce que tu fais, c'est que tu changes le pointeur vers elemProch dans ta variable queue, et ensuite tu �crases le contenu de cette m�me variable (dont le pointeur vers elemProch) avec le contenu de ptra. Autrement dit tu remets un elemProch invalide, et c'est toujours la m�me variable queue.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void Form1::retraitFile(file& mazda_tete, file& mazda_queue)
    {
    	file ptra;
    	ptra = mazda_tete;
    	mazda_tete = *ptra.elemProch;
    	delete(&ptra);
    }
    Et donc le probl�me de ton post (les probl�mes ci-dessus vont t'arriver juste apr�s :).

    Toujours en suivant le fonctionnement th�orique, tu veux r�cup�rer le premier �l�ment, remplacer la t�te par le 2� puis supprimer l'ancien premier �l�ment ?

    C'est pas ce que tu fais ici.
    Tu cr�es ptra, initialis� avec elemProch � null et valeur � 0. Tu y copies les donn�es de mazda_tete (qui s'�tait retrouv� avec un elemProch invalide, cf plus haut). Ensuite, tu �crases le contenu de mazda_tete par le contenu de ce qui se trouve � l'autre bout de son elemProch (qui est donc toujours aussi invalide).

    Forc�ment, �a plante.

    Citation Envoy� par tidou
    Si quelqu'un voit ou ca cloche ... merci d'avance
    � plusieurs endroits donc :)
    Tu as apparemment un probl�me avec les notions de passage par valeur, par r�f�rence et par pointeurs.

    Le gros de ton traitement devrait se faire via des pointeurs. L� vu que tu passes des r�f�rences, les affectations copient le contenu au lieu des �l�ments de la liste eux-m�mes.

    Actuellement par exemple, ta variable queue cr��e dans Form1_Load est toujours la m�me. Si elle est cens�e pointer sur le dernier �l�ment, c'est rat�. Tout ce que tu fais avec, c'est y stocker un elemProch invalide et la valeur du dernier �l�ment 'ajout�'. Mais rien n'est ajout� en fait.


    Bref, commence par transformer ta structure en classe, et (surtout), transmets-lui les op�rations ajout/retrait/init/vide. C'est � elle de les g�rer, pas au code qui l'utilise.
    Aussi, devoir transmettre un pointeur/une r�f�rence au dernier �l�ment de la liste pour chaque op�ration, c'est pas une bonne id�e (mais �a se r�gle tout seul une fois que tu isoles le traitement dans sa propre classe :)

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    'queue' c'est cens� �tre quoi ? Le dernier �l�ment de la liste ?
    => oui

    Cette m�thode n'est jamais appel�e, et j'ai toujours du mal � voir la relation entre tete et queue.
    => effectivement, j'ai oublie de l'appeler elle est cens� initialis� la t�te et la queue

    void Form1::ajoutFile(file& mazda_tete, file& mazda_queue, int donnee)
    {
    file* ptra;
    ptra = new(file);
    Probl�me potentiel ici, le pointeur vers elemProch n'est pas initialis�. Et il ne vaut pas null (plus pr�cis�ment, il vaut 0xcdcdcdcd d'apr�s mon debuggueur
    => que devrais-je faire ?
    ptra.elemProch = new(file);
    ptra.elemProch = NULL;

    ?


    ptra->nombre = donnee;

    if(fileVide(mazda_tete))
    {
    mazda_tete = *ptra;
    mazda_queue.elemProch = NULL;
    L� tu �crases le contenu de tete, avec donc un pointeur vers elemProch. Et je ne vois toujours pas ce que vient faire queue l�-dedans
    Oui je l'�crase car comme la file est vide il faut bien un 1er �l�ment pour la t�te j'ai bon ?par contre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     mazda_queue.elemProch = NULL;
    je dois le supprimer c'est ca ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
       } 
       else 
       { 
          mazda_queue.elemProch = ptra; 
          mazda_queue = *ptra; 
       }
    L� si je suis le principe de fonctionnement hypoth�tique, tu veux faire pointer le dernier �l�ment de la liste vers celui que tu viens de cr�er, et ensuite tu veux d�caler ta variable queue qui serait cens�e pointer sur le nouveau dernier �l�ment. J'ai bon ?
    Parce que l� ce que tu fais, c'est que tu changes le pointeur vers elemProch dans ta variable queue, et ensuite tu �crases le contenu de cette m�me variable (dont le pointeur vers elemProch) avec le contenu de ptra. Autrement dit tu remets un elemProch invalide, et c'est toujours la m�me variable queue.
    Oui c'est exactement ca mais je ne vois pas comment l'�crire en C++

    Idem pour retraitFile

    Pourrai tu mettre la proc�dure ajoutFile que je vois please

  8. #8
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut
    Citation Envoy� par tidou
    void Form1::ajoutFile(file& mazda_tete, file& mazda_queue, int donnee)
    {
    file* ptra;
    ptra = new(file);
    Probl�me potentiel ici, le pointeur vers elemProch n'est pas initialis�. Et il ne vaut pas null (plus pr�cis�ment, il vaut 0xcdcdcdcd d'apr�s mon debuggueur :)
    => que devrais-je faire ? ptra.elemProch = NULL; ?
    �a devrait �tre fait par le constructeur de 'file'. Et tu devrais d'ailleurs pouvoir envoyer directement la valeur dans ce constructeur pour obtenir d'un seul coup un objet bien comme il faut. Donc
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    file *ptra = new file( donnee );
    Citation Envoy� par tidou
    Oui je l'�crase car comme la file est vide il faut bien un 1er �l�ment pour la t�te j'ai bon ?
    Sur le principe oui :)

    Citation Envoy� par tidou
    par contre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     mazda_queue.elemProch = NULL;
    je dois le supprimer c'est ca ?
    Ben c'est cens� faire quoi au juste ?
    La logique voudrait que le pointeur sur le dernier �l�ment de la liste... pointe sur le dernier �l�ment. Si le dernier �l�ment est dans la variable 'tete', alors la variable 'queue' devrait pointer dessus.
    Donc tu devrais juste faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    mazda_queue = mazda_tete;
    Mais �videmment probl�me, tu passes des r�f�rences et non des pointeurs, donc tu ne peux pas faire pointer une variable sur une autre.
    Le simple fait que tu aies d�clar� 'tete' et 'queue' comme �tant directement des variables de type 'file' plut�t que des pointeurs, �a t'emp�che de faire ce que tu veux.
    Et si tu en faisais des pointeurs, avec l'organisation actuelle, tu devrais passer des r�f�rences aux pointeurs. �a devient tordu (et crade :)

    Citation Envoy� par tidou
    Oui c'est exactement ca mais je ne vois pas comment l'�crire en C++ :oops:
    Le C++ n'est pas le probl�me principal l�, tu devrais d�j� voir comment organiser les objets. Le langage n'entre en jeu qu'apr�s :)

    Citation Envoy� par tidou
    Pourrai tu mettre la proc�dure ajoutFile que je vois please
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      void Queue::Enqueue( int value )
      {
        if ( this->IsEmpty )
          _head = _tail = new QueueItem( value );
        else
        {
          _tail->NextItem = new QueueItem( value );
          _tail = _tail->NextItem;
        }
     
        ++_count;
      }
    �a aide ? :)
    Pas s�r :)


    Petit d�tour par la case design :
    - tu veux mod�liser une file.
    - chaque �l�ment de la file contient un nombre et connait l'�l�ment qui le suit.
    - la file elle-m�me ne consiste qu'en une t�te (pour r�cup�rer les donn�es) et une queue (pour les insertions).
    - les op�rations � effectuer sur la file sont : ajouter un �l�ment � la fin, retirer l'�l�ment du d�but, connaitre le nombre d'�l�ments, savoir si la file est vide, lire le premier �l�ment sans le retirer.

    Rien qu'� partir de �a, tu peux en tirer 2 classes :
    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
    class QueueItem
    {
      private:
      int _number;
      QueueItem *_nextItem;
    };
     
    class Queue
    {
      public:
      bool IsEmpty;
      int Count;
      void Enqueue( int value );
      int Dequeue();
      int Peek();
     
      private:
      QueueItem *_head, *_tail;
      int _count;
    };
    �a c'est pour un vague squelette de la structure. Manque la visibilit�, la syntaxe correcte pour d�clarer les propri�t�s en C++.NET et d'autres d�tails. Et bien s�r l'impl�mentation des m�thodes :)

    Mais peut-�tre que �a te donnera une autre id�e pour attaquer ton probl�me. Quelque chose d'un peu plus orient� objet, et qui du coup simplifie beaucoup les questions de passage de variables :)

    (ah, d�sol� pour l'anglais, le code en fran�ais me donne g�n�ralement envie de m'arracher les yeux tellement c'est peu adapt� :)

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    ok ok merci c'est vrai que ca simplifie les choses MAIS mon prof ne veut pas qu'on fasse d'objet en C++ pour ce TD donc c'est pourquoi je n'en ai pas fait.

    Raaa je sais plus par quoi commencer vraiment je bloque dans l'empilement et d�pilement de donn�e meme si le principe je l'ai compris

    en passant tete et queue par r�f�rence je n'ai aucun moyen de m'en sortir ? j'ai bien envie de refaire ca en objet mais je ne peut pas

  10. #10
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut
    Citation Envoy� par tidou
    ok ok merci c'est vrai que ca simplifie les choses MAIS mon prof ne veut pas qu'on fasse d'objet en C++ pour ce TD donc c'est pourquoi je n'en ai pas fait.
    ...

    Bouge pas.



    C'est quoi ce prof ?
    Autant je pouvais trouver sympa de faire faire du C++ pour obliger � �tre vraiment super rigoureux, autant faire faire du C++ sans faire d'objets �a me laisse... perplexe. (l'expression exacte serait �t� que �a me perfore le rectum, mais en un peu plus direct, et �a ne passerait pas les r�gles du forum )

    Interdire de faire de l'objet en C++... faudra que je la ressorte celle-l�...

    Bon... ben du coup �a complique pour rien, c'est malin...

    Citation Envoy� par tidou
    Raaa je sais plus par quoi commencer vraiment je bloque dans l'empilement et d�pilement de donn�e meme si le principe je l'ai compris
    Waip.
    Bien bien bien.

    [pense pense pense]

    Apparemment, ton prof interdit les classes, mais pas les structures ? Du moins celles qui n'ont pas de m�thodes ?

    Donc on peut simuler cradement les classes. En prenant les deux classes plus haut et en en faisant des structures :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct QueueItem
    {
      int Number;
      QueueItem *NextItem;
    };
     
    struct Queue
    {
      int Count;
      QueueItem *Head, *Tail;
    };
    Plus de variables priv�es, tout directement accessible, c'est la partie crade.

    Quant aux m�thodes de la classe Queue, elles deviennent des m�thodes de ton formulaire, auxquelles tu passes un obj... euh une structure Queue en plus dans les param�tres :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
      bool IsEmpty( Queue *queue );
      void Enqueue( Queue *queue, int value );
      int Dequeue( Queue *queue );
      int Peek( Queue *queue );
    �a rejoint plus ou moins ce que tu fais actuellement, mais :
    1) tu ne cr�es qu'un seul obj... euh structure Queue au lieu d'un obj... euh structure pour la t�te et d'un autre pour la queue.
    2) tu ne passes que cet obj... euh cette structure dans les m�thodes.
    3) � l'int�rieur des m�thodes, tu joues avec les pointeurs contenus dans la structure. l� tu peux facilement les d�placer comme tu veux. Pour r�cup�rer et virer la t�te tu peux faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    QueueItem *item = queue.Head;
    queue.Head = queue.Head.NextItem;
    (faut encore g�rer quand la liste devient vide)
    Pour ajouter un �l�ment � la fin, tu peux faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    QueueItem *item = new QueueItem();
    item->Number = machintruc;
    queue.Tail.NextItem = item;
    queue.Tail = queue.Tail.NextItem;
    (en g�rant quand la liste est vide)

    C'est le principe de ce que tu veux faire, mais en utilisant des pointeurs pour jongler avec les �l�ments. Si tu copies les contenus plut�t que les pointeurs �a ne va pas aller


    Ah, et fous une baffe � ton prof de ma part aussi.
    Une belle baffe. Une baffe classe


    PS: pour la queue elle-m�me, tu peux passer une r�f�rence plut�t qu'une pointeur. L� c'est jouable. Ce sont les �l�ments de la queue qui doivent �tre des pointeurs. En fait ton principal probl�me (en plus de mixages pointeurs/r�f�rences) vient de la tentative de g�rer la queue elle-m�me et ses �l�ments dans le m�me obj... euh la m�me structure. Si tu s�pares les deux, c'est tout de suite plus simple.

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    merci beaucoup

    Bon je reprend mon souffle 5 minutes et je recommence.

    PS : le prof en question qui est tr�s bien pr�f�re qu'on n'utilise pas encore de l'objet pour ces tds pour ne pas compliquer la t�che mais dans ce cas c'est vrai qu'avez ta solution objet le probl�me devient tous de suite plus simple.

    C'est compr�hensible car pour le TD en question (surtout celui-ci) quasiment personne � comprit comment faire

    =>goto work

  12. #12
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut
    Citation Envoy� par tidou
    PS : le prof en question qui est tr�s bien :lol: pr�f�re qu'on n'utilise pas encore de l'objet pour ces tds pour ne pas compliquer la t�che
    Il consid�re qu'apprendre � faire du proc�dural est une �tape obligatoire avant de commencer � faire de la POO ? Parce que oula non hein :)
    La POO est justement faite pour simplifier la mod�lisation des probl�mes (enfin surtout de leurs solutions :)
    Ne pas obliger � en faire si les bases n'ont pas �t� couvertes, �a ok, mais interdire d'en faire quand on peut et que ce serait plus adapt�, c'est carr�ment plus discutable.

    Enfin bon, au moins ce probl�me a l'avantage d'�tre suffisamment simple pour pouvoir passer assez facilement de l'un � l'autre (enfin surtout d'objet � proc�dural). C'est juste plus lourd, moins clair et plus crade en proc�dural :)

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    Enfin bon, au moins ce probl�me a l'avantage d'�tre suffisamment simple
    Dit tous de suite que je suis con t'en que t'y est (attention � ta r�ponse)

    Ne pas obliger � en faire si les bases n'ont pas �t� couvertes, �a ok,
    en effet nous n'avons vu que l'encapsulation ainsi que l'h�ritage (� peine pendant 2 heures pour le moment) donc pas grand chose en faite.

    Demain je te tient au courant si j'ai r�ussit � m'en sortir, j'h�site � faire deux classes comme toi, ca simplifie bien les choses.

    Au faite :d�sol� de t'avoir retarder dans ton travail

    [/code]

  14. #14
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut
    Citation Envoy� par tidou
    Enfin bon, au moins ce probl�me a l'avantage d'�tre suffisamment simple
    Dit tous de suite que je suis con t'en que t'y est (attention � ta r�ponse) :lol:
    Oui non mais toi t'es en cours, c'est normal :)
    Des gens qui bossent dans de vrais jobs de d�v et qui auraient des probl�mes avec �a, ce serait autrement plus g�nant :)

    Citation Envoy� par tidou
    Ne pas obliger � en faire si les bases n'ont pas �t� couvertes, �a ok,
    en effet nous n'avons vu que l'encapsulation ainsi que l'h�ritage (� peine pendant 2 heures pour le moment) donc pas grand chose en faite.
    Ah ben l'encapsulation c'est tout ce dont il s'agit ici :)

    Citation Envoy� par tidou
    Demain je te tient au courant si j'ai r�ussit � m'en sortir, j'h�site � faire deux classes comme toi, ca simplifie bien les choses.
    Deux classes ou deux structures, tout ce qui change c'est l'emplacement des m�thodes (dans ce cas-l�). Autre raison pour laquelle c'est idiot d'interdire les classes.

    Citation Envoy� par tidou
    Au faite :d�sol� de t'avoir retarder dans ton travail :oops:
    Me suis retard� tout seul, c'est une sorte de don :)

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    re

    bon voila ca avance mais ca cloche encore

    Code de queue.cpp

    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
     
    void initFile(queueItem*& mazda_tete, queueItem*& mazda_queue)
    {
    	//j initialise mes 2 pointeurs avec un passage par pointeur des parametres jai bon ? 
    	mazda_tete = NULL;
    	mazda_queue = NULL;
    }
     
    bool queue::fileVide(queueItem* mazda_queue)
    {
    	if(NULL(mazda_queue))
    	{
    		return true;
    	}
    	else
    	{
    		return false;
    	}
    }
    void queue::enfiler(int value)
    {
    	if(fileVide(_tete))
    	{
    		_tete = _queue = new queueItem( value);
    	}
    	else
    	{
    		_queue->nextItem = new queueItem(value);
    		_queue = _queue->nextItem;
    	}
    }
    void queue::defiler()
    {
    	queueItem* mazda_file;
    	mazda_file = _tete;
     
    	if(!fileVide(_tete))
    	{	
    		_tete = mazda_file->nextItem;
    		delete(mazda_file);
    	}
    }
    void queue::programmePrincipal()
    {
    	this->initFile(_tete, _queue);
    	this->enfiler(1);
    	this->enfiler(2);
    	this->defiler();
    	System::Windows::Forms::MessageBox::Show(System::Convert::ToString(this->_tete->_number));
    }
    code de queue.h

    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
     
    #include "queueItem.h"
     
    class queue
    {
    	public:
    		queue(void);
    		~queue(void);
    		bool fileVide(queueItem*);
    		void initFile(queueItem*&, queueItem*&);
    		void enfiler(int);
    		void defiler();
    		void programmePrincipal();
    	private: 
    		queueItem *_tete, *_queue;
    };
    QueueItem.cpp

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    queueItem::queueItem(int nombre)
    {
    	this->_number = nombre;
    }
    QueueItem.h

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    class queueItem
    {
    	public:
    		queueItem(int);
    		~queueItem(void);
    		int _number;
    		queueItem *nextItem;
    };
    l'erreur renvoy� � la compile

    file_tableau error LNK2001: symbole externe non r�solu "public: void __thiscall queue::initFile(class queueItem * &,class queueItem * &)" (?initFile@queue@@$$FQAEXAAPAVqueueItem@@0@Z)
    E:\Copie (2): fatal error LNK1120: 1 externes non r�solus
    e:\Copie (2) de file_tableau_old\queue.cpp(4): warning C4067: jetons inattendus apr�s la directive du pr�processeur - nouvelle ligne attendue
    e:\Copie (2) de file_tableau_old\queue.cpp(23): warning C4353: extension non standard utilis�e: constante 0 comme expression de fonction. Utilisez la fonction intrins�que '__noop' � la place
    qui est du � l'appel de la fonction initPile mais je ne vois pas pourquoi.

    Si j'enl�ve l'appel de la fonction initPile j'obtient une NULL exception dans la proc�dure Enfiler � la ligne Merci d'avance ...

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut

  17. #17
    Membre �m�rite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par d�faut
    Citation Envoy� par tidou
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void initFile(queueItem*& mazda_tete, queueItem*& mazda_queue)
    Avec queue:: devant, �a ira mieux.

    Citation Envoy� par tidou
    NULL == mazda_queue sera mieux aussi.

    Et les divers marchent mieux sans point-virgule.

    Question suivante ? :)

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Par d�faut
    Question suivante ?
    oui

    j'ai fait lesquelques petites modifications MAIS ca passe toujours pas.

    la compile fonctione mais au lancement j'obtient une NULL exception encore une fois au niveau de la proc�dure initFile � la ligne Le reste du code n'a pas chang� par rapport � ce que j'avais coll� except� tes 3 modifications.

    <desesperated>Merci d'avance ... (je crois que je n'y arriverai jamais avec ce programme de ******) </desesperated>

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [VB.NET] Contrôle dynamique et évènements
    Par johann.C dans le forum ASP.NET
    R�ponses: 4
    Dernier message: 30/11/2009, 10h45
  2. [CR.NET]Chargement dynamique d'une image
    Par Moah dans le forum SAP Crystal Reports
    R�ponses: 8
    Dernier message: 14/12/2004, 11h46
  3. [débutant][Conception] Structure dynamique avec Java
    Par blaiseac dans le forum G�n�ral Java
    R�ponses: 5
    Dernier message: 18/11/2004, 23h00
  4. [C++ .NET] Tableau dynamique
    Par tidou dans le forum VC++ .NET
    R�ponses: 18
    Dernier message: 10/10/2004, 15h11
  5. R�ponses: 12
    Dernier message: 26/04/2004, 08h32

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