Esempio n. 1
0
        //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);
        }
Esempio n. 2
0
        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());
        }