Exemplo n.º 1
0
        static void Main(string[] args)
        {
            // Variables
            Stack.Stack pila = new Stack.Stack();
            string      exp  = "5+6*7-8*9";
            string      res  = "";

            // Recorremos caracter por caracter
            foreach (char item in exp)
            {
                if (char.IsDigit(item))
                {
                    res += item;
                }
                else
                {
                    while (pila.Cantidad() > 0 && Precedencia(pila.Peek(), item))
                    {
                        res += pila.Pop();
                    }
                    pila.Push(item);
                }
            }
            int restantes = pila.Cantidad();

            if (restantes > 0)
            {
                while (restantes != 0)
                {
                    res += pila.Pop();
                    restantes--;
                }
            }
            Console.WriteLine(res);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            String[] resultado;
            // Evaluación de Postfix
            Stack.Stack pila = new Stack.Stack();
            int         n    = 0;
            int         a    = 0;
            int         b    = 0;
            // -+3*52*73
            // 352*+73*-
            String expresion = "33 5 2 * + 7 3 * - 100 *";

            // Para Postfix primero b luego a en pila.Pop();
            // Para PreFix primero a luego b en pila.Pop();
            resultado = expresion.Split(' ');
            try
            {
                foreach (string item in resultado)
                {
                    if (item == "*" || item == "/" || item == "+" || item == "-")
                    {
                        b = pila.Pop();
                        a = pila.Pop();
                        switch (item)
                        {
                        case "+":
                            n = a + b;
                            break;

                        case "-":
                            n = a - b;
                            break;

                        case "*":
                            n = a * b;
                            break;

                        case "/":
                            n = a / b;
                            break;

                        default:
                            break;
                        }
                        pila.Push(Convert.ToInt32(n));
                    }
                    else if (Convert.ToInt32(item) >= 0)
                    {
                        pila.Push(Convert.ToInt32((item)));
                    }
                }
                if (pila.Cantidad() == 1)
                {
                    Console.Write("Resultado de la Expresión {0} es = ", expresion);
                    pila.Transversa();
                    Console.WriteLine();
                }
                else
                {
                    Console.WriteLine("Hay un error con la expresión, verifica que cumpla la norma PostFix\nQue contenga espacios entre operadores.\n");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error " + e.Message);
            }
        }