Enviado por Cinthia el día 25 de mayo de 2005
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];
}
Enviado por roberto el día 8 de mayo de 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