NAVIGATION : INDEX DU FORUM / ACCUEIL DE P2PFR / WIKI

Merci de faire une recherche avant de poster :)

Nous sommes actuellement le 19 Avr 2024 06:36

Heures au format UTC + 1 heure [ Heure d’été ]




Forum verrouillé Ce sujet est verrouillé, vous ne pouvez rédiger ou éditer aucun message.  [ 14 messages ] 
Auteur Message
 Sujet du message: problème liste doublement chainée visual c++
MessagePublié: 16 Juin 2004 19:03 
bonjour,
j'ai un problème avec la construction d'une liste doublement chainée en visual c++:l'Objectif est de créer une liste en inserant les nouveaux elements en tête de liste (les plus vieux se retrouvent à la queue). La liste est composé d'Element :

Class Element(
CString name;
int val;
Element *next, *prec;
)

Declaration du constructeur de la classe Liste

Liste::Liste()
{
head = new Element();
courant = head;
tail = head;
nb = 0;
}

* Ajout du 1er element de la Liste

void Liste::Add(Element* Obj)
{
head=Obj;
tail=Obj;
nb++;
}

*Ajout des éléments suivants en tête de Liste (cette methode est tjrs appelé après Add().

void Liste::AddElementOnListHead(Element* Obj)
{
if (head !=NULL)
{
head->SetPrecedent(Obj);
Obj->SetNext(head);
}
else
{
tail=Obj;
}
head=Obj;
nb++;
}


A l'affichage,je me rend compte que je me suis planté à quelque part.

void List::Affichage()
{
CResource* temp;
temp = head;

while(temp!=NULL)
{
temp->afficher();
temp=temp->GetNext();
}


Quelqu'un peut il me dire ce qui va pas ?

Merci à tous


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 16 Juin 2004 21:08 
... vais vomir... :vomi:


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 17 Juin 2004 10:48 
???????


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 17 Juin 2004 17:38 
Hors-ligne
0 ou 1 je me tâte
Avatar de l’utilisateur

Inscrit le: 07 Déc 2001 02:00
Messages: 10996
Localisation: Lille et ailleurs
Dans List::Affichage()

Code:
   CResource* temp;

Cresource est une classe mère de Element ?
---

Pourquoi ne pas revoir le constructeur de Liste pour éviter d'avoir recours à une fonction Add qui ne sert qu'a ajouter le premier élément ?
Tu peux avoir 2 constructeurs.
Code:
   Liste::Liste(Element * Obj)


En plus ta fonction AddElementOnListHead semble gérer l'oubli d'appel de la fonction Add()

---

Sinon ton algo semble bon (j'ai raisonné dans l'autre sens : pour moi si on part de la tête on fait un getPrec() pour revenir vers la queue), peut être que l'erreur se trouve ailleurs dans ton programme ?

Qu'est ce qui se produit à l'affichage ? boucle infinie ? ou alors les elements qui s'affichent ne sont pas ceux que tu attends ?

---

Si c'est pas trop long tu peux donner l'intégralité de ton code.

(l'impératrice a eu des indigestions de C++, ça explique sa réaction)


Rapporter ce message
Haut
 Profil Site Internet 
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Juin 2004 00:35 
à l'affichage,il affiche la 1ere valeur en boucle infinie..j'obtiens le meme resultat en positionnant ptemp=head ou ptemp=tail dans le code de l'affichage

Code:
void Liste::Affichage()
{
   
   Element *ptemp;
   ptemp = head;     //meme resultat qu'avec ptemp=tail (bizar)
   int cpt=1;   
   
   while(ptemp!=NULL)
   {
        ptemp=ptemp->GetNext();
    }
}

j'ai fusionné les methodes d'ajout d'elements,voici donc la dernière version :
Code:
Liste::CList()
{
   nb=0;
   head=NULL;
   tail=NULL;
}

void List::Add(Element * Obj)
{
     Obj->SetNext(head);
     Obj->SetPrec(NULL);
     nb++;
     head = Obj;
      if(tail == NULL)
      {
            tail = Obj;
       }

}


Ca à l'air d'etre propre mais la boucle infinie règne en maitresse..(donc c'est pas propre..)
Cté une erreur de manip,le CResource*,c'est dû à un copier coller.à la place,c'est Element*.

merci


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Juin 2004 12:47 
Citer:
Ca à l'air d'etre propre mais la boucle infinie règne en maitresse..(donc c'est pas propre..)
Cté une erreur de manip,le CResource*,c'est dû à un copier coller.à la place,c'est Element*.

Faut être branquignolle fameusement pour faire des copier-coller dans un source.....et fainaiant !!

Quand on est fainaiant, on demande à quelqu'un d'autre alors.....

Vraimint bièce, faut aller en politique alors......


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Juin 2004 14:15 
ecoute,té pas obligé de repondre,mé sois plus poli.le copier coller,g l'ai fé de mes sources vers le forum. J'ai changé le nom de mes Classes pour ke ca soit plus parlant d'ou la classe CResource ki est Element..Je pensais pas ke gté obligé de l'expliker pour ke tu comprennes..comment veux tu ke ca compile si CResource se retrouve com par hasard dans mon code? Merci kan meme grand manitou...


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 20 Juin 2004 15:09 
Hors-ligne
0 ou 1 je me tâte
Avatar de l’utilisateur

Inscrit le: 07 Déc 2001 02:00
Messages: 10996
Localisation: Lille et ailleurs
Je ne réponds que maintenant, je ne sais pas si c'est toujours utile puisque tu as pt êt résolu ton problème entre temps.

Code:
while(temp!=NULL)
{
   temp->afficher();
   temp=temp->GetNext();
}


si temp ne vaut jamais NULL, tu boucles à l'infini.
Ta méthode getNext() doit renvoyer NULL à un moment où à un autre.

2 fonctions sont à revoir :

Le constructeur d'Element -> il doit fixer next et prec à NULL lors de la construction.
La méthode getNext -> elle doit renvoyer NULL lorsqu'elle arrive au dernier élément.

plutot que de faire
Code:
while(temp!=NULL)

Tu peux aussi faire en sorte de tester si le pointeur pointe vers le dernier élément de ta liste, puisque tu le connais (c'est tail)


Rapporter ce message
Haut
 Profil Site Internet 
Répondre en citant  
 Sujet du message: rep
MessagePublié: 20 Juin 2004 19:47 
Anonymous a écrit:
ecoute,té pas obligé de repondre,mé sois plus poli.le copier coller,g l'ai fé de mes sources vers le forum. J'ai changé le nom de mes Classes pour ke ca soit plus parlant d'ou la classe CResource ki est Element..Je pensais pas ke gté obligé de l'expliker pour ke tu comprennes..comment veux tu ke ca compile si CResource se retrouve com par hasard dans mon code? Merci kan meme grand manitou...

On n'a parfaitement compris, il ne faut pas faire rire les cochons !!
mais un copier-coller est sources d'erreurs !!
rhhhhhhalalala
fait un peu une compilation ligne par ligne pour voir ou est le pbm précisément.
Vendre des pizzas peut-être ?
T'a de la chance que la vieille n'ets pas là !! :D


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message: aïe
MessagePublié: 21 Juin 2004 13:32 
Hors-ligne
Maniaque de l'orthographe
Avatar de l’utilisateur

Inscrit le: 09 Sep 2003 16:46
Messages: 2059
Localisation: là où j'ai mourru la dernière fois...
ça stress le c++, hein???


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 21 Juin 2004 13:52 
Hors-ligne
Posteur Fou
Avatar de l’utilisateur

Inscrit le: 25 Avr 2003 20:04
Messages: 5722
Localisation: qtorrent
juste une remarque hors sujet :oops: :
feignant :makeadeal:

_________________
Ce n'est pas parce que je suis fou que je n'ai pas toute ma tête!

comment avoir confiance en soi


Rapporter ce message
Haut
 Profil Site Internet 
Répondre en citant  
 Sujet du message:
MessagePublié: 21 Juin 2004 18:21 
Citer:
mais un copier-coller est sources d'erreurs !!

Ce qu'il faut éviter, c'est copier un grand pavé de code (qui fonctionne) qu'on colle et adapte ensuite pour résoudre un problème similaire.
Pourquoi :
- car on se retrouve parfois avec du code en trop
- car on peut oublier de modifier certaines choses
- car il faut essayer de concevoir générique, cad écrire des méthodes réutilisables dans des situations proches mais différentes.

Dans tous les cas, cette remarque ne le concerne pas puisque le seul copier/collé qu'il ait fait, c'est "son code source => sur le forum", comme il le dit.
Cherchez l'erreur...

Citer:
fait un peu une compilation ligne par ligne pour voir ou est le pbm précisément.

Il faudra que tu m'expliques comment tu t'y prends. En Cobol ça marche pt être.

Citer:
ça stress le c++, hein???

As tu essayé Java ?

@apoon, je saisis pas à qui s'adresse ta remarque.


Rapporter ce message
Haut
  
Répondre en citant  
 Sujet du message:
MessagePublié: 23 Juin 2004 14:33 
Hors-ligne
Posteur Fou
Avatar de l’utilisateur

Inscrit le: 25 Avr 2003 20:04
Messages: 5722
Localisation: qtorrent
Anonymous a écrit:
Citer:
Faut être branquignolle fameusement pour faire des copier-coller dans un source.....et fainaiant !!

Quand on est fainaiant, on demande à quelqu'un d'autre alors.....

ma remarque s'adressait à ça :makeadeal:
:lol:

_________________
Ce n'est pas parce que je suis fou que je n'ai pas toute ma tête!

comment avoir confiance en soi


Rapporter ce message
Haut
 Profil Site Internet 
Répondre en citant  
 Sujet du message:
MessagePublié: 23 Juin 2004 16:48 
Ah ok, je pensais qu'il n'y avait que Watchapette qui se souciait de l'orthographe


Rapporter ce message
Haut
  
Répondre en citant  
Afficher les messages publiés depuis:  Trier par  
Forum verrouillé Ce sujet est verrouillé, vous ne pouvez rédiger ou éditer aucun message.  [ 14 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 12 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Aller vers:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction réalisée par Maël Soucaze © 2010 phpBB.fr