Calculatricee postfixé en concept des piles

elhjaj Messages postés 3 Statut Membre -  
 belhauss -
Bonjour, URGENTTTTTTTTTTTTTTT
j'ai un petit probleme au fonctionnement de ce prog
j'ai fé seulement l'operation de l'addition et si ca marche les autres operations vont etre aussi à marche
j'ai une pile utiliséé pour calculer 2 valeurs ex: d'execution
2
9
+
11
j'ai probleme à retourner le résultat et au niveau de conversion de chaine de caracter en entier
si qq peut m'aider n'hesitez passss URGENTTT
voici le code Complet:::::

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define taille 50
typedef char typeEle;
typedef struct{
int som;
typeEle t[taille];
} pile;

bool EstVide(pile &p){
return (p.som==-1);
}

bool EstPleine(pile &p){
return (p.som==taille-1);
}

void Initialise(pile &p){
p.som=-1;
}

void Empiler(pile &p,typeEle v){
if(EstPleine(p)!=1)
{
p.som++;
p.t[p.som]=v;
}
}

void Depiler(pile &p){
if(EstVide(p)!=1)
p.som--;
}

typeEle Sommet(pile &p){
return (p.t[p.som]);
}

int calc(pile &p){

int i=0,val1=0,val2=0;int nbre;
int res=0;
char*p_conv=NULL;
char chaine[3];

/*val1=Sommet(p);
Depiler(p);
val2=Sommet(p);
Depiler(p);
res=val1+val2*/
for(i=0;i<=2;i++)
{
//cout<<"donner le car "<<endl;
cin>>chaine[i];
nbre=(int)strtol(&chaine[i],&p_conv,10);
if(!*p_conv){
//chaine[i]=nbre;
Empiler(p,nbre);}
else {

switch(chaine[i]){
case '+':{while(!EstVide(p)){
res=res+Sommet(p);
Depiler(p);
}
Empiler(p,res);
return res;
break;}
}
}
}

return res;
}
int main()
{
pile k;
//char c[1];
char chaine[4];
int r;
typeEle v,somme;
int choix;
do
{
cout<<" MENU "<<endl;
cout<<" donner votre choix"<<endl;
cout<<"1- pour initialiser"<<endl;
cout<<"2- pour empiler "<<endl;
cout<<"3- pour depiler"<<endl;
cout<<"4- pour renvoyer le sommet de la pile"<<endl;
cout<<"5- pour calculer l'expression "<<endl;
cout<<"0- pour sortir"<<endl;
cin>>choix;

switch(choix)
{
case 1:{
Initialise(k);
}break;
case 2:{
cout<<"donner la valeur à empiler"<<endl;
cin>>v;
Empiler(k,v);
}break;
case 3:{
Depiler(k);
}break;
case 4:{
// somme=Sommet(k);
cout<<"sommet="<<Sommet(k)<<endl;
}break;
case 5:{
//cout<<"donner un caracter "<<endl;
/*cin>>chaine[0];
//r=calc(k,chaine);
cin>>chaine[1];
//r=calc(k,chaine);
cin>>chaine[2];*/
r=calc(k);
cout<<"resultat est ="<<r<<endl;
}break;

}
}
while(choix!=0);

return (0);
}

1 réponse

belhauss
 
ya une fonction prédéfinie atoi(char *); pour les entiers et atof(char *); pour les float faudra just découper la chaîne ;) aller bon chance
0