Class de Pile et de File [C++] - C++ - Programmation
Marsh Posté le 23-10-2004 à 20:20:00
-_-
je comprend pas l'intérêt de passer un truc en argument à dépiler
le changement que t'as fait, c'est ajouter une valeur qui sert de retour, ce qui dans le cas précis ne sert strictement à rien (vu que t'as pas besoin de (retour)
Tu crées une fonction depiler(void) et tu enleves la ligne valeur=machintruc et t'as fini
Marsh Posté le 23-10-2004 à 20:25:56
Masklinn a écrit : -_- |
en gros je le déclare en bool encore, jretourne true si j'ai dépilé quelques chose, mais j'utilise pas de paramêtre et je vire l'affectation valeur = premier->element
edit: ou meme le bool ne sert à rien?
Marsh Posté le 23-10-2004 à 20:28:17
ben ca dépend de la manière dont tu gères tes erreurs -_-
(puisque c'est apparement la seule utilité de ton bool de retour)
A la limite si ton user veut dépiler sans rien récupérer il s'en fout de savoir si le dépilage a eu lieu ou si la pile était déjà vide, non?
(surtout dans la mesure ou la chaine de dépilage est encapsulée dans une boucle vérifiant l'état de la pile)
Marsh Posté le 23-10-2004 à 20:30:39
Masklinn a écrit : ben ca dépend de la manière dont tu gères tes erreurs -_- |
jaurais tendance à dire oui vu que jvais habituellement tester si la pile est vide avant de le faire
sinon ca serait mieux d'utiliser le fait que mon dépiler me retourne la valeur?
car bien souvent, quand jvais faire du gros traitement avec ma pile, je risque d'appeler ma méthode dessus() [qui me renvoit l'élément en haut de pile] suivit de dépiler, ca risque d'être un peu plus exigeant dans ce cas là
par contre lorsque je vais vider la pile, ca sera plus rapide sans retour de valeur
Marsh Posté le 23-10-2004 à 20:31:35
dessus (ce nom est un peu pourri fyi), ca sert à quoi, remplacer la prochaine valeur sans la dépiler?
Marsh Posté le 23-10-2004 à 20:33:57
Masklinn a écrit : dessus (ce nom est un peu pourri fyi), ca sert à quoi, remplacer la prochaine valeur sans la dépiler? |
faut le dire au prof que c'est un nom mauvais
dessus() me renvoit la valeur de l'élément en haut de pile sans y toucher
Marsh Posté le 23-10-2004 à 20:34:49
quoi? explique mais jai simplement copier ce que j'ai dans mes notes
edit: merde taz a effacé son post
Marsh Posté le 23-10-2004 à 20:36:13
quel intérêt c'a a d'utiliser dessus() puis dépiler alors que tu pourrais dépiler avec un retour de valeur?
Marsh Posté le 23-10-2004 à 20:38:24
Masklinn a écrit : quel intérêt c'a a d'utiliser dessus() puis dépiler alors que tu pourrais dépiler avec un retour de valeur? |
c'est justement la question
si j'ai un dépiler sans retour de valeur, ca sera mieux pour ma méthode vider() non?
par contre ca sera moins bien quand viendra le temps de faire du traitement sur ma pile
et en sachant que je risque de faire plus de traitement sur la pile que d'appel à vider(), je suis donc mieux de coder mon depiler() avec retour de valeur, vrai?
edit: et donc de laisser mon code exactement ainsi
Marsh Posté le 23-10-2004 à 20:41:07
suffit de créer 2 fonctions différentes -_-
Marsh Posté le 23-10-2004 à 20:42:36
Masklinn a écrit : suffit de créer 2 fonctions différentes -_- |
ca vaut vraiment la peine selon toi? j'y perds pas grand chose dans le vider, et ca sera pas souvent appelé
Marsh Posté le 23-10-2004 à 20:49:01
c'est pas comme si c'était dur hein -_-
genre (taz va surement gueuler mais j'men fous )
Code :
|
et dans ton .h t'as
void depiler(void);
bool depiler(TYPE& valeur);
Marsh Posté le 23-10-2004 à 20:51:19
dac
1) pk taz va gueuler sur ca?
2) selon sque le prof a dit, on peut pas avoir un .h et un .cpp avec notre utilisation des templates, faut que ca soit dans le même fichier. et justement un pote qui a commencé le travail avant moi avait eu ce problème et il a donc tout foutu dans un .h (les déclarations et son code) et dans son tp2.cpp il fait un include de Pile.h
Marsh Posté le 23-10-2004 à 20:56:15
Burgergold a écrit : dac |
parce que Taz gueule toujours
Citation : 2) selon sque le prof a dit, on peut pas avoir un .h et un .cpp avec notre utilisation des templates, faut que ca soit dans le même fichier. et justement un pote qui a commencé le travail avant moi avait eu ce problème et il a donc tout foutu dans un .h (les déclarations et son code) et dans son tp2.cpp il fait un include de Pile.h |
Oui j'ai merdé, quand ya des templates les fonctions sont dans la déclaration, donc oublies les deux lignes du bas
(d'ailleurs quand tu fais des templates c'est directement le code, pas de déclaration à coté)
Marsh Posté le 23-10-2004 à 20:58:10
bon bin merci pour l'aide, jvais continuer avec ca et tester, après ca sera la File et après le tp en lui même
Marsh Posté le 23-10-2004 à 21:04:47
c'est quoi le sujet de TP?
Marsh Posté le 23-10-2004 à 21:06:07
Depiler(void)
c'est beau ça ...
bool Pile<TYPE>::Depiler(TYPE& valeur)
les exceptions, c'est pas pour les iench ...
# void Pile<TYPE>::vider() {
# TYPE valeur;
# while (! estVide()) {
# depiler(valeur);
# }
vachement efficace ...
Marsh Posté le 23-10-2004 à 21:09:42
Masklinn a écrit : c'est quoi le sujet de TP? |
jai des expressions à lire dans un fichier, du genre "3 4 +" (mais en vachement plus compliquer
faut une classe Pile, File, Expression, Symbole
je dois lire le tout, le mettre sous un formation d'équation "normal" (jme rappel jamais du terme, jcrois que c'est infixé), et l'évaluer
faut gérer les priorités d'opérateur, les parenthèses et tout le tralala
Marsh Posté le 23-10-2004 à 21:09:47
Taz a écrit : Depiler(void) |
pourquoi je peux pas?
et pour les exceptions, j'y ai pensé mais ca dépend de la fréquence avec laquelle il tente d'extraire des valeurs d'une pile vide
(parce que si 30% des dépilages se font sur des piles vides je suis pas sur que les exceptions soient très intéressantes)
burger > ta fonction vider, elle est pas imposée par le prof?
Marsh Posté le 23-10-2004 à 21:09:58
Taz a écrit : Depiler(void) |
tu suggères?
edit: et dailleurs maintenant le vider c'est
Code :
|
Marsh Posté le 23-10-2004 à 21:46:51
Tu peux t'inspirer du code de la STL en regardant l'adaptateur de conteneur std::stack.
Marsh Posté le 23-10-2004 à 21:48:42
xterminhate a écrit : Tu peux t'inspirer du code de la STL en regardant l'adaptateur de conteneur std::stack. |
ok merci, jai justement besoin de voir comment faire mon affectateur pour ma surcharge du "=", p-e que jvais y trouver quelques chose
Marsh Posté le 24-10-2004 à 20:32:53
hum petit problème avec ma classe de File
j'ai pas encore tout tester mais ma méthode defiler() ne semble pas toujours fonctionner
Code :
|
Code :
|
ca sa fonctionne mais
Code :
|
valeur a bien la bonne valeur, mais test.estVide() me retourne pas true lorsque ma file est vide et je comprends pas vraiment
les 2 fonctions defiler font "pratiquement" la meme chose, yen a une qui défile, l'autre défile avec un effet de bord
Marsh Posté le 24-10-2004 à 20:36:52
const File& operator=(const File& ); c'est pas la bonne signature ça
manque un constructeur de recopie
défiler c'est pas français. utilise ajouter/enlever
Marsh Posté le 24-10-2004 à 20:40:21
Taz a écrit : const File& operator=(const File& ); c'est pas la bonne signature ça |
tiré des notes du prof
Code :
|
meme chose pour les noms enfiler, defiler
Marsh Posté le 24-10-2004 à 20:50:06
ben c'est pas bien, surtout que "const File& operator=(const File& );" n'est pas la signature canonique de l'opérateur d'affectation.
enfin bon, ton prof est supide, quel intérêt d'écrire un conteneur s'il ne peux même pas se contenir ...
# cellule(const TYPE& e, cellule* s=NULL) {
# element=e;
# suivant=s;
# }
la par contre, tu looses sérieusement...
Marsh Posté le 24-10-2004 à 20:54:23
Taz a écrit : ben c'est pas bien, surtout que "const File& operator=(const File& );" n'est pas la signature canonique de l'opérateur d'affectation. |
le prof est pas mauvais en soi, c'est le doyen et tout ceux qui l'on eu comme prof le considère comme l'un des meilleurs profs
mais bon, passons
bon pour mon constructeur de cellule, j'suis parti d'un modèle avec une tête et une queue, mais j'ai opté pour le modèle avec seulement une queue et peut-être que le constructeur doit être différent effectivement
Marsh Posté le 24-10-2004 à 20:58:33
il est mauvais, il a jamais lu un vrai bouquin
sinon, pour ta classe cellule, pourquoi tu fais des affectations plutôt que des initilisations ? du reste la classe File, elle manque un peu d'inlining
Marsh Posté le 24-10-2004 à 21:02:47
Taz a écrit : il est mauvais, il a jamais lu un vrai bouquin |
"pourquoi tu fais des affectations plutôt que des initilisations ?"
parce que je fais ce que "le prof nul qui a jamais lu un vrai bouquin" m'a montré
"elle manque un peu d'inlining"
ouais ca j'ai lu dans mes notes "C'est exactement le genre de fonction que l'on a avantage à coder inline"
Mais bon, je commence à peine mon truc, alors jvais commencer par le faire fonctionner
Marsh Posté le 24-10-2004 à 21:58:16
jai édité mon code en modifiant le constructeur de cellule, j'en ai aussi ajouté un (constructeur du premier élément)
mais ca ne change rien à mon problème de méthode defiler() qui ne fonctionne pas en version effet de bord (puisque ma methode estVide() me dit que ma file est pas vide alors qu'elle devrait l'être )
Marsh Posté le 24-10-2004 à 22:07:48
Taz a écrit : ça c'est de l'algo |
bin ce qui est un peu con, c'est que j'ai tout récupéré des notes et ca fonctionne pas, c'est plutot ca qui me fait chier
c'est pas comme si le prof nous avait dit: faite moi une classe de File et de Pile
il nous a dit: faite le tp, en utilisant les Files et les Piles de tel facon, ca devrait bien se faire
alors jrécupère mes notes, jle mets en fichier et prout
Marsh Posté le 24-10-2004 à 22:40:21
Les algos sont complètement faux. Et en plus, c'est n'est pas une file mais une pile.
Empiler:
queue= nouvelElement(valeur,queue);
Depiler:
nouvelleQueue = queue->suivant
valeur = queue->valeur
delete queue
queue=nouvelleQueue
return valeur
Marsh Posté le 24-10-2004 à 22:56:26
Lam's a écrit : Les algos sont complètement faux. Et en plus, c'est n'est pas une file mais une pile. |
merde jsais plus quoi en penser, c'est vraiment des algos de file selon mon manuel de note, j'commence à me demander si vous vous payez pas mal tête
en gros la représentation c'est
1 queue qui pointe sur le dernier élément de la liste
le dernier élément pointe sur le 1er
le 1er sur le 2e, 2e sur le 3e, 3e sur 4e... Xe sur le dernier
c'est pas une file ca?
Marsh Posté le 25-10-2004 à 09:14:58
Au temps pour moi, j'avais pas vu qu'il s'agissait d'une liste circulaire (je pensais à une vague file avec un pointeur sur le début, et un sur la fin). Ca m'apprendra à poster quand je suis sous médocs...
Marsh Posté le 23-10-2004 à 20:15:38
voila, jdois faire une classe Pile
dans celle-ci, j'ai une méthode vider() et qui appele une méthode depiler()
comme cela ca compile, mais le prof a dans ses exemples cette version de vider() qui ne fonctionne pas
sachant que je n'ai pas réelement besoin de savoir qu'elle est la valeur de l'élément dépilé, que je veux simplement le dépiler (j'ai une autre fonction qui me retourne la valeur du dessus de la pile), c'est normal le changement que j'ai du apporter?
Message édité par burgergold le 24-10-2004 à 20:28:03