Pile

Fermé
nanou315 - 7 janv. 2010 à 12:07
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 7 janv. 2010 à 14:40
Bonjour,
je suis débutante en C++,je veux bien vous présenter mon codele remplissage des piles fonctionne très bien mais lorsque je veux dépiler un ou des eléments qui se situent a la fin de la pile des "jobnonaffecte" ça fonctionne pa.
je sais pa c koi le problem le code ne génère pa de fautes mais il ne me donne pas le résultat que j'espère trouvé.
Merci bien de m'aider


voici mon code
#include <iostream>
#include <stack>
using namespace std;

/* Procédure qui remplit la pile*/

void remplir(stack<int>& p)
{
int n;
cout << "Entrez le nombre d'elements de la pile : ";
cin >> n;

int elt;
for(int i = 0; i < n; i++)
{
cout << "Entrez un element : ";
cin >> elt;
p.push(elt);
}
}


/* Procédure qui affiche la pile*/

void afficher(const stack<int>& p)
{
stack<int> t = p;
while(!t.empty())
{
cout << t.top();
t.pop();
if(!t.empty())
cout << " , ";

}
}

void empty()
{

stack<int> p;

cout << "Etat de la pile : ";

if(p.empty()== true)

cout << "pas vide" << endl;

else

if(p.empty())

cout << "vide" << endl;

}

void remplirjobaffecte(stack<int>& jobaffecte)
{
int n1;
int xi;
cout << "\nEntrez le nombre d'elements de la pile des jobs affectes : ";
cin >> n1;



for(int i = 0; i < n1; i++)
{
cout << "\n Entrer le ou les job(s) affecte : ";
cin >> xi;
jobaffecte.push(xi);
}

}

void afficherjobaffecte(const stack<int>& jobaffecte)
{
stack<int> t = jobaffecte;
while(!t.empty())
{
cout << t.top();
t.pop();
if(!t.empty())
cout << " , ";

}
}

//////////////////////

void remplirjobnonaffecte(stack<int>& jobnonaffecte)
{
int n2;
int xk;
cout << "\nEntrez le nombre d'elements de la pile des jobs non affectes : ";
cin >> n2;




for(int k = 0; k < n2; k++)
{
cout << "\n Entrer le ou les job(s) non affecte : ";
cin >> xk;
jobnonaffecte.push(xk);
}

}

void afficherjobnonaffecte(const stack<int>& jobnonaffecte)
{
stack<int> t = jobnonaffecte;
while(!t.empty())
{
cout << t.top();
t.pop();
if(!t.empty())
cout << " , ";

}
}

int pop()
{
stack<int> jobaffecte;
int x2;
int n1;

if (n1 == 0)
return -1;

/*cout << "\n Entrez l'element a depiler: ";
cin >> x2;
jobaffecte.push(x2);*/

//cout << "Nombre d'elements dans la pile : " << i.size() << endl;

n1--;
return 0;

}



void afficher(const stack<int>& jobaffecte,int x)
{
stack<int> t1 = jobaffecte;
while(!t1.empty())
{
cout << t1.top();
t1.pop();
if(!t1.empty())
cout << " , ";

}
}

int main()
{
stack<int> p;
stack<int> i;
stack<int> jobaffecte;
stack<int> jobnonaffecte;

remplir(p);
empty();
cout << "Votre pile est : ";
afficher(p);

remplirjobaffecte(jobaffecte);
cout << "Votre pile des jobs affectes est : ";
afficherjobaffecte(jobaffecte);

remplirjobnonaffecte(jobnonaffecte);
cout << "Votre pile des jobs non affectes est : ";
afficherjobnonaffecte(jobnonaffecte);

pop();




return 0;
}

1 réponse

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
7 janv. 2010 à 14:40
En fait je n'ai pas très bien compris ce que tu cherchais à faire. Pour commencer je ne comprends pas pourquoi tes fonctions d'affichage modifient tes piles (pop, push...) alors qu'elles ne sont (vu leur nom) ne faire qu'un affichage.

Du coup je ne suis pas sûre de comprendre ce que tu cherches à programmer... Si tu peux expliciter un peu plus précisément ton besoin.

Par ailleurs, je ne suis pas convaincue qu'une stack soit le container le plus adapté à ton besoin. D'une part tu es susceptible de stocker des jobs en plusieurs exemplaires. De plus les jobs sont dépilés dans l'ordre inverse de leur empilement. A mon avis, une std::map ou un std::set seraient plus adéquats.
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library

Bonne chance
0