pila postfija

Dario
08 de Mayo del 2008
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.

Cinthia
08 de Mayo del 2008
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];
}

roberto
08 de Mayo del 2008
oye disculpa, es un buen aporte cinthya pero de casualidad no tendras lo que hace tu libreria clase para poder compilarlo bien.
si me la podrias enviar te lo agradeceria muchisimo