Esempio n. 1
0
File: notas.cs Progetto: hvzzzz/-
 // --------------------------------------------------------------
 static string ProcesarToken(string token, CPila pila, string expresionPosFijo)
 {
     // ----- Si token = ")" desapilar todos los operadores hasta encontrar "("
     if (token.Equals(")"))
     {
         while ((!pila.EsVacia()) && (!((string)pila.Cima()).Equals("(")))
         {
             expresionPosFijo = expresionPosFijo + (string)pila.Cima();
             // ---- Desapilar operador
             pila.Desapilar();
         }
         // ---- Quitar de la pila el ")"
         if (!pila.EsVacia())
         {
             pila.Desapilar();
         }
     }
     else
     if (token.Equals("+") || token.Equals("-") ||
         token.Equals("*") || token.Equals("/") ||
         token.Equals("^"))
     {
         // ---- Desapilar operadores, si existen de acuerdo a us precedencia
         while ((!pila.EsVacia()) && OkProcedencia(token, (string)pila.Cima()))
         {
             // ---- Agregar operador a la expresion PosFijo
             expresionPosFijo = expresionPosFijo + (string)pila.Cima();
             // ---- Desapilar operador
             pila.Desapilar();
         }
         // ---- Apilar nuevo operador
         pila.Apilar(token);
     }
     else
     // ---- Si es "(" apilar
     if (token.Equals("("))
     {
         pila.Apilar(token);
     }
     else
     // ---- Si no es " " agregar token a expreseionPosFijo, caso
     //      contrario ignorar token.
     if (!token.Equals(" "))
     {
         expresionPosFijo = expresionPosFijo + " " + token;
     }
     // ---- Retornar valor de expresión posFijo
     return(expresionPosFijo);
 }
Esempio n. 2
0
File: notas.cs Progetto: hvzzzz/-
        //-----------------------------------------------------------------
        static void ProcesarToken(string token, CPila pila)
        {
            // ----- Este metodo procesa un token, considerando tres casos:
            //       a) Si token es un operador (+,-,*,/,^) desapila dos
            //          operandos de la pila, efectua la operación y apila el resultado
            //       b) Si token es un operando, simplemente apila en la pila
            //       c) Si token es un blanco, simplemente se ignora

            if (token.Equals("+") || token.Equals("-") || token.Equals("*") || token.Equals("/") || token.Equals("^"))
            {
                // ----- Recuperar Operandos. Notar que el metodo Cima() de la
                //       pila devuelve un object, por tanto es necesario
                //       convertirlo en un float mediante un casting

                // obtiene operando de la pila
                float operandoDer = float.Parse(pila.Cima().ToString());

                // elimina operando de la pila
                pila.Desapilar();

                // obtiene siguiente operando de la pila
                float operandoIzq = float.Parse(pila.Cima().ToString());

                // elimina operando restante de la pila
                pila.Desapilar();

                // ---- Efectuar operacion y apilar el resultado
                //      Notar que el resultado de cada operación
                //      se debe apilar como un objeto de tipo Float
                if (token.Equals("+"))
                {
                    pila.Apilar((float)(operandoIzq + operandoDer));
                }
                else if (token.Equals("-"))
                {
                    pila.Apilar((float)(operandoIzq - operandoDer));
                }
                else if (token.Equals("*"))
                {
                    pila.Apilar((float)(operandoIzq * operandoDer));
                }
                else if (token.Equals("/"))
                {
                    pila.Apilar((float)(operandoIzq / operandoDer));
                }
                else if (token.Equals("^"))
                {
                    pila.Apilar((float)(Potencia(operandoIzq, operandoDer)));
                }
            }
            else
            if (!token.Equals(" "))      // ----- token es un operando
            {
                pila.Apilar((token));
            }
        }