pila postfija
hola a todos espero me puedan ayudar tengo este porgrama pero no se como hacerlo:
crear un programa que utilice una pila para resolver expresiones matematicas escritas en notacion postfija. La captura debe realizarse termino a termino de la expresion y como datos de cadena.
crear un programa que utilice una pila para resolver expresiones matematicas escritas en notacion postfija. La captura debe realizarse termino a termino de la expresion y como datos de cadena.
tengo este programa a ver si te sirve
Aplicación.cpp
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include "clase.h"
int operacion(char,int,int);
void main()
{
pila objeto1;
int operando1,operando2,resultado,valor;
char arreglo[max];
char temporal[1];
char operando;
cout<<"n Ingrese la ecuacion posfija n"<<endl;
cin>>arreglo;
for(int i=0;arreglo[i]!=NULL;i++)
{
if(isdigit(arreglo[i]))
{
temporal[i]=arreglo[i];
arreglo[i]=atoi(&temporal[i]);
objeto1.push(arreglo[i]);
}
else
if(arreglo[i]=='+'||arreglo[i]=='-'||arreglo[i]=='*'||arreglo[i]=='/'||arreglo[i]=='^')
{
operando=arreglo[i];
operando2=objeto1.pop();
operando1=objeto1.pop();
resultado=operacion(operando,operando1,operando2);
objeto1.push(resultado);
valor=objeto1.ver_tope();
}
}
cout<<" nEl resultado de la operacion es: "<<valor<<endl;
cout<<" nEn caso de no recibir ningun resultado la expresion no es incorrecta n"<<endl;
getch();
}
int operacion(char operando,int operando1, int operando2)
{
int resultado,temporal;
switch(operando)
{
case'+': resultado=operando1+operando2; break;
case'-': resultado=operando1-operando2; break;
case'*': resultado=operando1*operando2; break;
case'/': resultado=operando1/operando2; break;
case'^': if(operando2==2)
resultado=operando1*operando1;
if(operando2>2)
{
temporal=operando1;
for(int i=1;i<operando2;i++)
{
temporal=temporal*operando1;
resultado=temporal;
}
}
if(operando2==0)
resultado=1;
break;
}
return resultado;
}
Clase.h
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#define max 30
class pila
{
int tope;
char arreglo[max];
public:
bool lleno();
void push(int);
int pop();
bool empty();
int ver_tope();
pila(){tope=-1;}
};
bool pila::empty()
{
if(tope==-1)
return true;
return false;
}
bool pila::lleno()
{
if(tope==max-1)
return true;
return false;
}
void pila::push(int numero)
{
if(lleno())
exit (1);
arreglo[++tope]=numero;
}
int pila::pop()
{
if(empty())
exit(1);
return arreglo[tope--];
}
int pila::ver_tope()
{
if(empty())
exit(1);
return arreglo[tope];
}
Aplicación.cpp
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include "clase.h"
int operacion(char,int,int);
void main()
{
pila objeto1;
int operando1,operando2,resultado,valor;
char arreglo[max];
char temporal[1];
char operando;
cout<<"n Ingrese la ecuacion posfija n"<<endl;
cin>>arreglo;
for(int i=0;arreglo[i]!=NULL;i++)
{
if(isdigit(arreglo[i]))
{
temporal[i]=arreglo[i];
arreglo[i]=atoi(&temporal[i]);
objeto1.push(arreglo[i]);
}
else
if(arreglo[i]=='+'||arreglo[i]=='-'||arreglo[i]=='*'||arreglo[i]=='/'||arreglo[i]=='^')
{
operando=arreglo[i];
operando2=objeto1.pop();
operando1=objeto1.pop();
resultado=operacion(operando,operando1,operando2);
objeto1.push(resultado);
valor=objeto1.ver_tope();
}
}
cout<<" nEl resultado de la operacion es: "<<valor<<endl;
cout<<" nEn caso de no recibir ningun resultado la expresion no es incorrecta n"<<endl;
getch();
}
int operacion(char operando,int operando1, int operando2)
{
int resultado,temporal;
switch(operando)
{
case'+': resultado=operando1+operando2; break;
case'-': resultado=operando1-operando2; break;
case'*': resultado=operando1*operando2; break;
case'/': resultado=operando1/operando2; break;
case'^': if(operando2==2)
resultado=operando1*operando1;
if(operando2>2)
{
temporal=operando1;
for(int i=1;i<operando2;i++)
{
temporal=temporal*operando1;
resultado=temporal;
}
}
if(operando2==0)
resultado=1;
break;
}
return resultado;
}
Clase.h
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#define max 30
class pila
{
int tope;
char arreglo[max];
public:
bool lleno();
void push(int);
int pop();
bool empty();
int ver_tope();
pila(){tope=-1;}
};
bool pila::empty()
{
if(tope==-1)
return true;
return false;
}
bool pila::lleno()
{
if(tope==max-1)
return true;
return false;
}
void pila::push(int numero)
{
if(lleno())
exit (1);
arreglo[++tope]=numero;
}
int pila::pop()
{
if(empty())
exit(1);
return arreglo[tope--];
}
int pila::ver_tope()
{
if(empty())
exit(1);
return arreglo[tope];
}
