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

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 chevronné
    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
    Points : 1 904
    Points
    1 904
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 chevronné
    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
    Points : 1 904
    Points
    1 904
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    Par défaut

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    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