//convierto expresion a profija private static string convertir(string infija) { string posfija = ""; ExPilas pila = new ExPilas(49); for (int i = 0; i < infija.Length; i++) { char caracter = infija[i]; if (esOperador(caracter)) { if (pila.pilavacia()) { pila.apilar(caracter); } else { int pe = prioridadExpresion(caracter); int pp = prioridadPila((char)pila.topePila()); if (pe > pp) { pila.apilar(caracter); } else { posfija += pila.desapilar(); pila.apilar(caracter); } if (infija[i] == '(') { posfija += pila.desapilar(); } else if (infija[i] == ')') { posfija += caracter; } } } else { posfija += caracter; } } while (!pila.pilavacia()) { posfija += pila.desapilar(); } return(posfija); }
private static double evaluarPosfija(string posfija) { ExPilas pila = new ExPilas(100); for (int i = 0; i < posfija.Length; i++) { char valor = posfija[i]; if (!esOperador(valor)) { double num = Convert.ToDouble(valor + " "); pila.apilar(num); } else { double num2 = (double)pila.desapilar(); double num1 = (double)pila.desapilar(); double num3 = operacion(valor, num1, num2); pila.apilar(num3); } } return((double)pila.topePila()); }