Pointeurs je comprends plus rien

Pointeurs je comprends plus rien - C++ - Programmation

Marsh Posté le 29-05-2004 à 15:37:41    

En fait cette fonction est censée insérer au bon endroit dans une pile (classe composée d'un tableau d'élément, du nombre de case occupe et de sa taille) un element qui n'est autre qu'une structure composée d'un nom et d'un numero  
 

Code :
  1. void Pile::empile(const element elt)
  2. {
  3.      if (nbCaseOccupe_<taille_)
  4.        {
  5.              int i=0,  indicetemp;
  6.              short unsigned int val;
  7.              val=elt.priorite;
  8.              //si la pile est vide je l'insère à la première place
  9.              if (nbCaseOccupe_==0)
  10.                {
  11.                  pile_[i]=elt;
  12.                  nbCaseOccupe_++;
  13.                }
  14.              else // je recherche l'indice ou je devrais l'insérer
  15.                    {
  16.                      while ((i<nbCaseOccupe_) && (pile_[i].priorite<val+1))
  17.                        i++;
  18.                     indicetemp=i;
  19. //décalage de tt les elt après indice pr faire de la place pr l'elt
  20.                     for (int i=nbCaseOccupe_;i>indicetemp;i--)
  21.                       {pile_[i]=pile_[i-1];}
  22.                     pile_[indicetemp]=elt;
  23.                     nbCaseOccupe_++;
  24.                    }
  25.            }
  26.      else cout<<"Pile pleine";
  27. }


 
En l'executant il m'affiche des valeurs complètement erronées qui doivent se trouver en dehors du tableau .. je comprends pas trop pourquoi ... si vous pouviez m'aider me donner un indice merci
voici les 3 fichiers:
http://ddstocke4.free.fr/c/pile.cpp
http://ddstocke4.free.fr/c/pile.h
http://ddstocke4.free.fr/c/testPile.cpp


Message édité par monstrobaf le 29-05-2004 à 16:07:14
Reply

Marsh Posté le 29-05-2004 à 15:37:41   

Reply

Marsh Posté le 29-05-2004 à 15:43:09    

Ils sont où les pointeurs ?

Reply

Marsh Posté le 29-05-2004 à 15:43:30    

c'est quoi la question ?
 
et ca sert a quoi de specifier const un element que tu passe par copie ?

Reply

Marsh Posté le 29-05-2004 à 15:45:01    

je précise que je débute en c++.
je met const car je ne modifie pas l'element j'ai juste à l'insérer ds la pile.

Reply

Marsh Posté le 29-05-2004 à 15:46:30    

passe le par reference aussi, sinon ca n'a pas d'utilité vu que tu travail sur une copie ??

Reply

Marsh Posté le 29-05-2004 à 15:49:03    

Je travaille sur une copie ? non je ne copie rien .. j'ai mon tableau d'élement pile_ qui est un attribut privé de ma classe pile et dc ba ts les elt qui sont avt l'indice je les décale pas ca sert à rien après je décale les elements d'un cran vers la droite pr pouvoir insérer elt

Reply

Marsh Posté le 29-05-2004 à 15:51:09    

je parlait du parametre const element elt, met plutot const element &elt
 
sinon c'est quoi la question? ca plante? c'est quoi le probleme ?

Reply

Marsh Posté le 29-05-2004 à 15:53:40    

oki ... ba le problème c'est que ca donne rien du tout...
Après j'affiche la pile et que dalle ca me donne n fois la même information 42907 où n est le nombre d'elt ds la pile.
Y'a til un problème de syntaxe qqpart ?
Je vs ai mis les fichiers sources si vous voulez mieux comprendre et voir vs même l'erreur.

Reply

Marsh Posté le 29-05-2004 à 16:04:27    

oh du C !

Reply

Marsh Posté le 29-05-2004 à 16:10:15    

pourquoi tu dis ca ...c'est du c++  ? c'est pas ds le bon forum ?
Si qqn pouvait m'expliquer d'où venait la faute car là les partiels arrivent et si j'ai pas compris çà ... aie aie aie


Message édité par monstrobaf le 29-05-2004 à 16:20:03
Reply

Marsh Posté le 29-05-2004 à 16:10:15   

Reply

Marsh Posté le 29-05-2004 à 16:24:06    

je suppose que Taz te dit ça car tu t'emmerdes à gérer une pile toi même façon C, au lieu d'utiliser std::stack<> ou std::vector<> de la STL :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-05-2004 à 16:26:59    

ba en fait c'est un peu le but de mon mini projet c'est pr ca ... il faut simuler un peu le principe d'ordonnancement.
Donc la pile contiendrait les processus avec leur priorité et quand elles sont égales le plus récemment entre sort le plus vite (principe de la pile)
Quant à Stack je c pas ce que c'est on l'a pas appris et std::vector non plus.
Ce que je veux c'est pas forcément que mon truc marche mais plutôt savoir pourquoi ca bug car aucune erreur de compil.
Pourtant j'ai déroulé l'algo a la main plein de fois mais je comprends tjs pas.


Message édité par monstrobaf le 29-05-2004 à 16:36:26
Reply

Marsh Posté le 29-05-2004 à 16:38:40    

Hello,
 
Tout d'abord j'ai une petite question sur le concept tu tableau dans ta pile, quel en est l'intérêt ?
Je pense plutot que le concept de la pile est de pouvoir ajouter des éléments tant qu'on veut.
 
La position [1] représenterait le sommet de la pile et serait reprensenté par un Noeud dans ta pile
[1] <- [2] <- [3] <- [4] <- [5]

Code :
  1. class Noeud
  2. {
  3. public:
  4. Noeud* Suivant ;
  5. int Valeur ;
  6. Noeud(int valeur)
  7. {
  8. Valeur = valeur ;
  9. Suivant = NULL ;
  10. }
  11. class Pile
  12. {
  13. public:
  14. int Hauteur ;
  15. Noeud* Sommet ;
  16. void Pile::empile(int valeur)
  17.   {
  18.   Noeud* nouveau = new Noeud(valeur) ;
  19.   nouveau->Suivant = Sommet ;
  20.   Sommet = nouveau ;
  21.   ++Hauteur ;
  22.   }
  23. }


 
Cf. msg dessous édité


Message édité par nevin0u le 29-05-2004 à 16:46:09
Reply

Marsh Posté le 29-05-2004 à 16:41:30    

remplace class par struct, la tout tes membres sont private...

Reply

Marsh Posté le 29-05-2004 à 16:44:30    

Je ne sais pas ce que c'est qu'un noeud et ba moi mon tableau dynamique d'élement représente une pile.
Quand j'empile un elt je le place ou il faut en fonction de sa priorité comme ca après pour dépiler j'ai juste à virer le dernier elt du tableau en faisan nbCaseOccupe_--.
Et comme l'opérateur d'affichage va de 0 a nbCaseOccupe_ elle n'affichera pas le dernier elt supprimé.

Reply

Marsh Posté le 29-05-2004 à 16:45:20    

cris tu parles a qui a nevinou ou moi ?

Reply

Marsh Posté le 29-05-2004 à 16:48:48    

Le Noeud c'est une classe quit représent un élément de la pile, et la fonction empile ajoute automatiquement au sommet de la pile.
 
Sinon pour ton code je l'ai téléchargé et je vais essayer de compiler on va voir.

Reply

Marsh Posté le 29-05-2004 à 16:51:30    

oki toi c'est plus sous la forme de liste non ? reprends le cpp car je viens de le mettre à jour
merci de ta part


Message édité par monstrobaf le 29-05-2004 à 17:00:26
Reply

Marsh Posté le 29-05-2004 à 16:58:55    

je parlais Nevin0u avant qu'il edite son message

Reply

Marsh Posté le 29-05-2004 à 17:08:18    

oui c'est la forme d'une liste
 
voila j'ai trouvé les bugs :P
 
ta fonction void saisirElement fonctionne bien mais dans ton main l'élément tout n'es pas modifier
 
Il faudrait la passer par référence
 
soit

Code :
  1. dans le .cpp
  2. void saisirElement(element &elt)
  3. {
  4. ...
  5. }
  6. et dans le .h
  7. void saisirElement(element& ) ;
  8. Comme ca rien à changer dans TestPile.h


 
ou faire une méthode saisirElement qui retourne un élément
 

Code :
  1. dans le .h
  2. element saisirElement(element) ;
  3. dans le .cpp
  4. element saisirElement (element elt)
  5. {
  6. ...
  7. return elt ;
  8. }
  9. et dans le main
  10. tout = saisirElement(tout);
  11. duracel.empile(tout);


 
personnellement j'utiliserais la première méthode
 
en espérant t'avoir aidé
 
a+

Reply

Marsh Posté le 29-05-2004 à 17:11:05    

et les classes imbriquées bordel ? et la couche template ?

Reply

Marsh Posté le 29-05-2004 à 17:16:28    

Taz a écrit :

et les classes imbriquées bordel ? et la couche template ?


 :kaola:

Reply

Marsh Posté le 29-05-2004 à 17:18:40    

Taz ? c'est à qui que tu t'adresses ? en tt cas, moi je ne sais pas ce que c'est la couche template
merci pr votre aide je pars tester

Reply

Marsh Posté le 29-05-2004 à 17:20:06    

au lieu de tirer la langue tu ferais bien d'apprendre, au lieu de faire du C avec des classes

Reply

Marsh Posté le 29-05-2004 à 17:21:57    

En attendant Taz ... Nevinou essaye de m'aider dc c pas moi qui vait le critiquer !!

Reply

Marsh Posté le 29-05-2004 à 17:23:51    

MErci bcp Nevinou tu m'a débloqué !! Bon week-end à toi

Reply

Marsh Posté le 29-05-2004 à 17:23:53    

Taz a écrit :

au lieu de tirer la langue tu ferais bien d'apprendre, au lieu de faire du C avec des classes


 
:'(
 

Code :
  1. template <class T>
  2. class Fifo ;
  3. template <class T>
  4. class Noeud
  5. {
  6. private :
  7. Noeud<T>* suivant ;
  8. T FInfo ;
  9. public :
  10. Noeud() : FInfo(0), suivant(0) {} ;
  11. Noeud(T information) : FInfo(information), suivant(0) {}
  12. friend class Fifo<T> ;
  13. };


 
Un début d'implémentation dans ce sens ?

Reply

Marsh Posté le 29-05-2004 à 17:53:53    

h'ai di class imbriquée.
 
je veux pas voir Noeud de porteée d'e globale, tu me le fout en private dans Fifo<T> d'ailleurs une Pile, c'est LIFO :o

Reply

Marsh Posté le 29-05-2004 à 18:18:57    

Harkonnen a écrit :

je suppose que Taz te dit ça car tu t'emmerdes à gérer une pile toi même façon C, au lieu d'utiliser std::stack<> ou std::vector<> de la STL :o


 
Ce qui en soit est à moitié idiot (la remarque pas l'utilisation de la stl). Ce n'est pas parce qu'on utilise le runtime C en C++, qu'on fait du "C". Il est tout à fait possible d'utiliser le runtime de n'importe quel langage, disons le php pour l'exemple, en C. Il faudrait dire en voyant un tel code "oh du php"? Ensuite, si on n'utilise pas le runtime C en C++, exit le realloc, welcome to notre ami big gâchis.

Reply

Marsh Posté le 29-05-2004 à 18:36:17    

DocMaboul a écrit :

Ensuite, si on n'utilise pas le runtime C en C++, exit le realloc, welcome to notre ami big gâchis.


 
mais de quoi tu parle ? (surement pas de la stl)

Reply

Marsh Posté le 29-05-2004 à 18:47:25    

cris56 a écrit :

mais de quoi tu parle ? (surement pas de la stl)


 
que le C ou le C++, c'est un langage de programmation plus un runtime. Le runtime C étant accessible dans le C++, dire "c'est du C" parce qu'il y a des appels au runtime C dans un code C++, cela ne veut rien dire ou pas grand chose. Pour le realloc, j'ai la flemme...
 
edit: imprécision


Message édité par docmaboul le 29-05-2004 à 18:59:55
Reply

Marsh Posté le 29-05-2004 à 19:03:21    

moi c'est surtout le realloc qui m'interesse

Reply

Marsh Posté le 29-05-2004 à 19:49:23    

cris56 a écrit :

moi c'est surtout le realloc qui m'interesse

pour foutre tes objets en l'air parce que tu viens de passer du temps à coder un constructeur et un operator= ?

Reply

Marsh Posté le 29-05-2004 à 20:04:30    

ta pas compris, je demande son explication comme quoi realloc serait meilleur, moi je dirais jamais une chose  pareil
 
et surtout pourquoi il parle de gachi???

Reply

Marsh Posté le 29-05-2004 à 20:06:03    

parce que c'est un abruti, il l'a prouvé 100fois, ne fais pas attention à lui.

Reply

Marsh Posté le 29-05-2004 à 23:40:13    

Taz a écrit :

parce que c'est un abruti, il l'a prouvé 100fois, ne fais pas attention à lui.


 
Et comme la stl est truffée d'appels au runtime C, en suivant ta logique idiote, la stl c'est pas du C++ d'abord. Non, en suivant tes niaiseries, la stl, he bien... c'est du C... :D

Reply

Marsh Posté le 30-05-2004 à 07:12:44    

vas y, exemple ...
 
edit : et surtout dis nous de qui elle est cette fameuse implémentation
edit2: et surtout ne viens pas me parler de spécialisation dans le cas char, comme on peut trouver dans des string ou autre. tu parles d'autres choses


Message édité par Taz le 30-05-2004 à 07:24:26
Reply

Marsh Posté le 30-05-2004 à 07:21:58    

t'es pas à la messe à cette heure toi ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-05-2004 à 07:24:56    

non et j'arrive pas à dormir ...

Reply

Marsh Posté le 30-05-2004 à 07:28:01    

lis la bible, tu vas voir, en 5 min c'est réglé tes insomnies.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed