Tal vez sea un poco simple la pregunta pero lo que es programación me ha costado un poco y sobre todo porque tiene mucho que la ejerzo.
Bueno una de mis preguntas es:¿ para pasarla de notación infija a posfija tendría que crear tres pilas?, una donde guarde los operandos, los operadores y las funciones trigonométricas?.
El código lo dejo aquí, y una parte donde no entiendo bien que hace si me pudiesen explicar y si me pudiesen dar ideas para realizar el programa.
Gracias
Código PHP:
   #include<iostream>
#include<stdlib.h>
#include<ncurses.h>
#include<math.h>
#include<iostream>
#include<fstream>
 
 
using namespace std;
 
class Pila{
private:
    struct Elemento{
        int dato;
        Elemento *ant;
    }*p;
public:
    Pila(){
        p=NULL;
    }
    
    void insertar(int d){
        Elemento *q;
        q=new Elemento();
        q->dato=d;
        q->ant=p;
        p=q;
    }
    
    int extraer(){
        Elemento *q;
        int d;
        if(p==NULL){
            cout<<"\nPila vacia";
            return -1;
        }
        q=p;
        p=q->ant;
        d=q->dato;
        delete q;
        return d;
    }
    
    bool vacia(){// si esta vacia
        if(p==NULL)
            return true;
        return false;
    }
    
    ~Pila(){
        while(p!=NULL)
            extraer();
    }
};
 
bool pre(char a, char b){//toma simbolos
/*
Aquí pensaba agregar las funciones trigonométricas pero como es de carácter por carácter entonces por ejemplo sen me marca un error
*/    
 
int p1, p2;
    if(a=='+' || a== '-')
        p1=1;
    else if(a=='*' || a=='/' || a=='%')
        p1=2;
    else if(a=='(')
        p1=0;
    else if(a==')')
        p1=0;
    if(b=='+' || b== '-')
        p2=1;
    else if(b=='*' || b=='/' || b=='%')
        p2=2;
    else if(b=='(')
        p2=0;
    else if(b==')')
        p2=0;
    
    if(p2>p1)
        return true;
    return false;
}
 
char *posfija(char *infija){
    Pila p;
    char *pos;
    char a,b;
    int i,j, len=-1;
    while(infija[++len]!=0);
    pos=new char[len+1];
    j=0;
    for(i=0; i<len; i++){
        if((infija[i]>='0' && infija[i]<='q') || (infija[i]>='a' && infija[i]<='z')){
            pos[j++]=infija[i];
        }
        else{//de aquí para adelante hasta terminar la función no entiendo muy bien que hace//
            if(p.vacia()){
                p.insertar(infija[i]);
            }
            else{
                a=p.extraer();
                b=infija[i];
                if(b==')'){
                    while(a!='('){
                        pos[j++]=a;
                        /*    if(p.vacia())
                         a='(';
                         else*/
                        a=p.extraer();
                    }
                }
                else{
                    if(pre(a,b) || infija[i]=='('){
                        p.insertar(a);
                        p.insertar(b);
                    }
                    else{
                        pos[j++]=a;
                        p.insertar(b);
                    }
                }
            }    
        }
        
    }
    while(!p.vacia()){
        a=p.extraer();
        pos[j++]=a;
    }
    pos[j]=0;
    return pos;
}
 
int main(){
    Pila p;//objeto p de la clase pila
    int i;
    char a[]="a-((a+b)*c)/d";
    char *b;
    b=posfija(a);
    cout<<b;
    //    for(i=0; i<100; i++)
    //    p.insertar(i);
    //while(!p.vacia())
    //printf("%d\t", p.extraer());
    getchar();
    return 0;
    
} 
    
 

