/* AREF ZINELABIDINE */
/* BOULBAROUD SAID*/
#include<iostream>
#include<string>
using namespace std;
/********************** on construit la classe pile et ensuite la classe file qui herite de pile*****/
/************debut de la classe pile*****/
class pile{
public:
pile(); // on appelle le constructeur de la pile
bool test;//on test s'il s'agit d'une pile ou file
int pos;// indicateur de positionnement dans la pile ou file
string table[100];// le tableau qui va contenir le element
string nom;// contient le nom pile ou file
//les methodes qu'on va utiliser
void depiler();//suprimer des elements
void empiler();// ajouter des elements
void afficher();//afficher le contenu de la pile ou file
void nombre_ele();// le nombre des elements que contient la pile ou file
void quitter();// pour quitter
~pile();// destruction de pile
};
/*******le constructeur et destructeur********/
pile::pile(){
pos=0;
nom="pile";
}
pile::~pile(){ cout<<"la pile est detruite"<<endl;
}
/******la methode qui ajoute des elements dans la pile ou dans la file********/
void pile::empiler(){
string element_intro;// l'element a introduire
bool test=true;// d'abord on considere que la pile ou la est pleine
for(int i=0;i<100;i++){// on cherche une case vide
if(table[i]=="")
{test=false;// si on trouve un case vide on sort de la boucle
break;
}
}
if(test==true)
cout<<nom<<" est pleine"<<endl;
else
{cout<<"veillez saisir l'element a introduire dans la "<<nom<<endl;
cin>>element_intro;
pos++; //on incremente le nombre des cases pleines
for(int j=0;j<pos;j++){
table[pos-j]=table[pos-1-j];
}
table[0]=element_intro;
}
}
/*********** la methode qui suprime des elements *********/
void pile::depiler(){
bool test=true;//on suppose tout d'abord que la pile est vide
for(int i=0;i<100;i++){
if(table[i]!=""){
test=false;// s'il ya au moins une case pleine on sort de la boucle
break;
}
}
if(test==true)
cout<<"la pile est vide"<<endl;
else{
for(int j=0;j<pos-1;j++){
table[j]=table[j+1];
}
table[pos-1]="";
pos--;//on decremente le nombre des cases vide apres avoir suprimer un element
}
}
/************la methode qui affiche les elements *******/
void pile::afficher(){
if(pos==0) cout<<"la "<<nom<<" est vide"<<endl;
else{
cout<<"les elements de votre "<<nom<<" sont: "<<endl;
for(int i=0;i<pos;i++)
{
cout<<table[i]<<endl;
}
}
}
/****** methode qui donne le nombres des cases pleines ***/
void pile::nombre_ele(){
if(pos==0)
cout<<"la "<<nom<<" est vide"<<endl;
else
cout<<"le nombre des elements de la "<<nom<<" est: "<<pos<<endl;
-
}
/**********la methode quitter****/
void pile::quitter(){
for(int i=0;i<pos;i++)
{table[i]="";
}
test=false;
}
/****la fin de la classe pile ****/
/**********la classe file********************/
// la classe file herite de la classe pile
class file:public pile{ public: file();//constructeur de la file
void depiler();//on redifinie la methode depiler
~file();//le destructeur
};
file::file(){
nom="file";
-
}
file::~file(){ cout<<"la file est detruite"<<endl;
}
/******la methode qui suprime des elements de la pile******/
void file::depiler(){
bool test=true;//on suppose tout d'abord que la file est vide
for(int i=0;i<100;i++){
if(table[i]!=""){
test=false;// s'il ya au moins une case pleine on sort de la boucle
break;
}
}
if(test==true)
cout<<"la file est vide"<<endl;
else{
-
table[pos-1]="";
pos--;//on decremente le nombre des cases vide apres avoir suprimer un element
}
}
/****************************la fin de la classe file************************/
int main(){
int choix;
int operation;
int longueur;
int i=0;
-
pile*pil=new pile();// declarer et instancier l'objet pil de la classe pile
file*fil=new file();// declarer et instancier l'objet pil de la classe pile
-
do{// boucle de traitement
-
cout<< "veuillez indiquer votre choix s'il vous plait:tapez 1 pour gerer la pile"<<endl;
cout<<"..............................................:tapez 2 pour gerer la file"<<endl;
cout<<"..............................................:tapez 3 pour quiter "<<endl;
cin>>choix;
switch(choix){
/****** gestion de la pile *****/
case 1:{
cout<<"la pile est construite "<<endl;
/*******boucle de la gestion de la pile******/
do{
switch(operation){
case 1: pil->afficher();
break;
case 2: pil->empiler();
break;
case 3: pil->depiler();
break;
case 4: pil->nombre_ele();
break;
case 5: pil->quitter();
break;
-
-
}
cout<<"veuillez indiquer l'operation a faire :"<<endl;
cout<<"...................................: tapez 1 pour afficher les elements de pile"<<endl;
cout<<"...................................: tapez 2 pour ajouter un element"<<endl;
cout<<"...................................: tapez 3 pour enlever un element"<<endl;
cout<<"...................................: tapez 4 pour voir le nombre des elements "<<endl;
cout<<"...................................: et pour finir tapez 5"<<endl;
cin>>operation;
}while(operation!=5);
};break;
/**** fin de la gestion de la pile****/
/****** gestion de la file *****/
case 2:{
cout<<"la file est construite "<<endl;
/*******boucle de la gestion de la file******/
do{
switch(operation){
case 1: fil->afficher();
break;
case 2: fil->empiler();
break;
case 3: fil->depiler();
break;
case 4: fil->nombre_ele();
break;
case 5: fil->quitter();
break;
-
}
cout<<"veuillez indiquer l'operation a faire :"<<endl;
cout<<"...................................: tapez 1 pour afficher les elements de file"<<endl;
cout<<"...................................: tapez 2 pour ajouter un element"<<endl;
cout<<"...................................: tapez 3 pour enlever un element"<<endl;
cout<<"...................................: tapez 4 pour voir le nombre des elements "<<endl;
cout<<"...................................: et pour finir tapez 5"<<endl;
cin>>operation;
}while(operation!=5);
};break;
/*****fin de la gestion de la pile******/
///quiter l'application
case 3:exit(1);
break;
default :cout<<"choix invalide"<<endl;
}
}while(choix!=3);// fin de la boucle de traitement
-
}