Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1761 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pointeurs je comprends plus rien

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Pointeurs je comprends plus rien

n°744694
monstrobaf
Posté le 29-05-2004 à 15:37:41  profilanswer
 

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
mood
Publicité
Posté le 29-05-2004 à 15:37:41  profilanswer
 

n°744696
verdoux
And I'm still waiting
Posté le 29-05-2004 à 15:43:09  profilanswer
 

Ils sont où les pointeurs ?

n°744697
cris56
Posté le 29-05-2004 à 15:43:30  profilanswer
 

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

n°744698
monstrobaf
Posté le 29-05-2004 à 15:45:01  profilanswer
 

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.

n°744700
cris56
Posté le 29-05-2004 à 15:46:30  profilanswer
 

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

n°744704
monstrobaf
Posté le 29-05-2004 à 15:49:03  profilanswer
 

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

n°744706
cris56
Posté le 29-05-2004 à 15:51:09  profilanswer
 

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 ?

n°744710
monstrobaf
Posté le 29-05-2004 à 15:53:40  profilanswer
 

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.

n°744717
Taz
bisounours-codeur
Posté le 29-05-2004 à 16:04:27  profilanswer
 

oh du C !

n°744724
monstrobaf
Posté le 29-05-2004 à 16:10:15  profilanswer
 

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
mood
Publicité
Posté le 29-05-2004 à 16:10:15  profilanswer
 

n°744739
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 29-05-2004 à 16:24:06  profilanswer
 

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)
n°744740
monstrobaf
Posté le 29-05-2004 à 16:26:59  profilanswer
 

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
n°744747
nevin0u
Posté le 29-05-2004 à 16:38:40  profilanswer
 

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
n°744749
cris56
Posté le 29-05-2004 à 16:41:30  profilanswer
 

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

n°744753
monstrobaf
Posté le 29-05-2004 à 16:44:30  profilanswer
 

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é.

n°744754
monstrobaf
Posté le 29-05-2004 à 16:45:20  profilanswer
 

cris tu parles a qui a nevinou ou moi ?

n°744756
nevin0u
Posté le 29-05-2004 à 16:48:48  profilanswer
 

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.

n°744758
monstrobaf
Posté le 29-05-2004 à 16:51:30  profilanswer
 

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
n°744762
cris56
Posté le 29-05-2004 à 16:58:55  profilanswer
 

je parlais Nevin0u avant qu'il edite son message

n°744769
nevin0u
Posté le 29-05-2004 à 17:08:18  profilanswer
 

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+

n°744770
Taz
bisounours-codeur
Posté le 29-05-2004 à 17:11:05  profilanswer
 

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

n°744773
nevin0u
Posté le 29-05-2004 à 17:16:28  profilanswer
 

Taz a écrit :

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


 :kaola:

n°744777
monstrobaf
Posté le 29-05-2004 à 17:18:40  profilanswer
 

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

n°744778
Taz
bisounours-codeur
Posté le 29-05-2004 à 17:20:06  profilanswer
 

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

n°744780
monstrobaf
Posté le 29-05-2004 à 17:21:57  profilanswer
 

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

n°744781
monstrobaf
Posté le 29-05-2004 à 17:23:51  profilanswer
 

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

n°744782
nevin0u
Posté le 29-05-2004 à 17:23:53  profilanswer
 

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 ?

n°744795
Taz
bisounours-codeur
Posté le 29-05-2004 à 17:53:53  profilanswer
 

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

n°744816
docmaboul
Posté le 29-05-2004 à 18:18:57  profilanswer
 

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.

n°744824
cris56
Posté le 29-05-2004 à 18:36:17  profilanswer
 

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)

n°744841
docmaboul
Posté le 29-05-2004 à 18:47:25  profilanswer
 

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
n°744856
cris56
Posté le 29-05-2004 à 19:03:21  profilanswer
 

moi c'est surtout le realloc qui m'interesse

n°744888
Taz
bisounours-codeur
Posté le 29-05-2004 à 19:49:23  profilanswer
 

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= ?

n°744904
cris56
Posté le 29-05-2004 à 20:04:30  profilanswer
 

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???

n°744909
Taz
bisounours-codeur
Posté le 29-05-2004 à 20:06:03  profilanswer
 

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

n°745007
docmaboul
Posté le 29-05-2004 à 23:40:13  profilanswer
 

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

n°745052
Taz
bisounours-codeur
Posté le 30-05-2004 à 07:12:44  profilanswer
 

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
n°745053
nraynaud
lol
Posté le 30-05-2004 à 07:21:58  profilanswer
 

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


---------------
trainoo.com, c'est fini
n°745055
Taz
bisounours-codeur
Posté le 30-05-2004 à 07:24:56  profilanswer
 

non et j'arrive pas à dormir ...

n°745056
nraynaud
lol
Posté le 30-05-2004 à 07:28:01  profilanswer
 

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


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pointeurs je comprends plus rien

 

Sujets relatifs
Pointeurs ?????[C] tableau de pointeurs...
Rien2 pointeurs a l'ecran pour 2 souris
fonction clock() de time.h comprends pas !Probleme bizard sur les pointeurs en C !
Tableau de pointeurs sur fonctons.Ma requete SQL marche mais ne me renvoie rien !
2 petites question de rien du tout = pb email et HTML ... merci......Kylix ne veux rien compiler
Plus de sujets relatifs à : Pointeurs je comprends plus rien


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR