Sei sulla pagina 1di 3

17/10/2016

INICIO

Estructurasdedatos:EvaluadordeexpresionesmatemticasenC++

BLOG

ARCHIVO

FOTOS

SOPORTE

Estructuras de datos

DOMINGO, 27 DE SEPTIEMBRE DE 2009

Evaluador de expresiones matemticas en C++


He aqu un programa que permite convertir una expresin infija a postfija y luego evaluarla para retornar
un resultado (double). El programa hace uso de la STL de C++ estndar (por ejemplo en el uso de la pila).
Este cdigo debe ser compilado con preferencia con G++; en Windows puede compilarlo con DevC++ (que
trae el compilador MinGW)
Tambin puede ser incluido en otros RAD que soporten C++ estndar (como Borland C++ Builder).
/*
CodigocreadoporChristianGmezSerapio
FacultadNacionaldeIngeniera.OruroBolivia
www.estructurasydatos.blogspot.com
*/
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<string>
usingnamespacestd;
intprioridad(charop){
switch(op){
case'^':return3;
case'*':
case'/':return2;
case'+':
case'':return1;
case')':return1;
default:return0;
}
}
stringconvertir(stringin){
stack<char>pila;
stringposf="";
for(inti=0;i<in.size();i++){
switch(in[i]){
case'(':
pila.push('(');
break;
case')':
while(!pila.empty()&&pila.top()!='('){
posf+=string(1,pila.top())+"";
pila.pop();
}
pila.pop();
break;
case'+':
case'':
case'*':
case'/':
case'^':
while(!pila.empty()&&prioridad(in[i])<=prioridad(pila.top())){
posf+=string(1,pila.top())+"";
pila.pop();
http://estructurasydatos.blogspot.pe/2009/09/evaluadordeexpresionesmatematicasen.html

Nube de etiquetas
c c++ codigo cpp datos
estructura estructuras
evaluadordeexpresionesenc++
evaluadordefuncionesc++
fuente implementacion lifo

pila pilas
Archivo del blog

> 2009 (1)


> septiembre (1)
> Evaluador de expresiones
matemticas en C++
> 2008 (2)

1/3

17/10/2016

Estructurasdedatos:EvaluadordeexpresionesmatemticasenC++

}
pila.push(in[i]);
break;
default:
while(isdigit(in[i])||in[i]=='.')
posf+=string(1,in[i++]);
posf+="";
i;
}
}
while(!pila.empty()){
posf+=string(1,pila.top())+"";
pila.pop();
}
returnposf;
}
doubleevaluar(stringp){
stack<double>pila;
doubleop1,op2;
for(inti=0;i<p.size();i+=2){
switch(p[i]){
case'^':
op2=pila.top();pila.pop();
op1=pila.top();pila.pop();
pila.push(pow(op1,op2));
break;
case'*':
op2=pila.top();pila.pop();
op1=pila.top();pila.pop();
pila.push(op1*op2);
break;
case'/':
op2=pila.top();pila.pop();
op1=pila.top();pila.pop();
pila.push(op1/op2);
break;
case'+':
op2=pila.top();pila.pop();
op1=pila.top();pila.pop();
pila.push(op1+op2);
break;
case'':
op2=pila.top();pila.pop();
op1=pila.top();pila.pop();
pila.push(op1op2);
break;
default:
stringaux="";
while(p[i]!='')
aux+=string(1,p[i++]);
pila.push(atof(aux.c_str()));
i;
}
}
returnpila.top();
}
intmain(){
strings,p;
cin>>s;
p=convertir(s);
cout<<"Posfija:"<<p<<endl;
cout<<"Evaluada:"<<evaluar(p)<<endl;
return0;
}
PUBLICADO POR CHRISTIAN EN 21:35
ETIQUETAS: EVALUADOR DE EXPRESIONES EN C++, EVALUADOR DE FUNCIONES C++

1 comentarios:
juan jose calderon paxi dijo...
exelente el programa compila perfectamente, has un video para youtube explicando como funciona o cual
es el macanismo que sigue el programa te lo agradeseria.
27 de junio de 2016, 8:10
http://estructurasydatos.blogspot.pe/2009/09/evaluadordeexpresionesmatematicasen.html

2/3

17/10/2016

Estructurasdedatos:EvaluadordeexpresionesmatemticasenC++

Publicar un comentario en la entrada


Pgina principal

Entrada antigua

Suscribirse a: Enviar comentarios (Atom)


DISEO ORIGINAL POR THE UNDERSIGNED | ADAPTACIN A BLOGGER POR BLOG AND WEB

http://estructurasydatos.blogspot.pe/2009/09/evaluadordeexpresionesmatematicasen.html

3/3

Potrebbero piacerti anche