[C++] PILE
Résolu/Fermé
Utilisateur anonyme
-
17 déc. 2007 à 20:45
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 30 sept. 2015 à 14:13
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 30 sept. 2015 à 14:13
3 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
17 déc. 2007 à 21:17
17 déc. 2007 à 21:17
A titre indicatif la STL fourni déjà une classe de pile :
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Evite d'inclure "string.h", prends plutôt le headers C++ : <cstring>. De toute façon ici il ne te sert à rien.
Evite le using namespace std; c'est une mauvaise habitude. Si ça ne pose pas de problème dans un .cpp il ne faut pas l'utiliser dans un .hpp (sinon tous les fichiers qui inclueront ce headers seront "contaminés" par ce using namespace).
Qui dit new dit delete. En particulier tu es sensé libérer tab dans le destructeur de pile (fonction ~pile).
Les else de empiler et depiler sont superflus.
Préfère les unsigned aux int quand l'entier reste positifs.
Pense à préciser "const" quand un paramètre / this est maintenu constant.
Le protected appliqué à tab, max, sommet peut être sous-entendu comme tu l'as fait, mais personnellement je préfère le mettre.
Ton main est sensé retourné un code d'exécution (0 si tout va bien).
Si tu es sous windows pense à rajouter un getchar en fin de programme pour voir ce qui s'affiche sur la console (header <cstdio> au lieu de <stdio.h>).
Je me suis permis de fusionner init et le constructeur.
Je sais pas si c'est ce que tu voulais faire mais actuellement cette pile ne permet d'empiler que 4 valeurs :
Bonne chance
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Evite d'inclure "string.h", prends plutôt le headers C++ : <cstring>. De toute façon ici il ne te sert à rien.
Evite le using namespace std; c'est une mauvaise habitude. Si ça ne pose pas de problème dans un .cpp il ne faut pas l'utiliser dans un .hpp (sinon tous les fichiers qui inclueront ce headers seront "contaminés" par ce using namespace).
Qui dit new dit delete. En particulier tu es sensé libérer tab dans le destructeur de pile (fonction ~pile).
Les else de empiler et depiler sont superflus.
Préfère les unsigned aux int quand l'entier reste positifs.
Pense à préciser "const" quand un paramètre / this est maintenu constant.
Le protected appliqué à tab, max, sommet peut être sous-entendu comme tu l'as fait, mais personnellement je préfère le mettre.
Ton main est sensé retourné un code d'exécution (0 si tout va bien).
Si tu es sous windows pense à rajouter un getchar en fin de programme pour voir ce qui s'affiche sur la console (header <cstdio> au lieu de <stdio.h>).
Je me suis permis de fusionner init et le constructeur.
#include <iostream> #include <cstdio> class pile{ protected: int *tab; unsigned sommet; unsigned max; public : pile(unsigned n=10): tab(NULL),sommet(0),max(n) { tab = new int[max]; } ~pile(){ delete tab; } inline bool em_vide() const { return sommet == 0; } inline bool em_pleine() const { return sommet == max-1; } bool empiler(const int & x){ if(em_pleine()) return false; tab[sommet++]=x; return true; } bool depiler(int & x){ if(em_vide()) return false; x = tab[--sommet]; return true; } void affich() const{ for(unsigned i=0;i<sommet;++i) std::cout << tab[i] << ' '; } }; int main(){ pile p(5); for(unsigned i=0;i<5;++i) p.empiler(i); p.affich(); std::cout << std::endl; int x; p.depiler(x); std::cout << "derniere valeur empilee : " << x << std::endl << "pile = "; p.affich(); std::cout << std::endl; // getchar(); // decommente cette ligne si tu es sous windows return 0; }
Je sais pas si c'est ce que tu voulais faire mais actuellement cette pile ne permet d'empiler que 4 valeurs :
(mando@aldur) (~) $ g++ -W -Wall plop.cpp (mando@aldur) (~) $ ./a.out 0 1 2 3 derniere valeur empilee : 3 pile = 0 1 2
Bonne chance