Ejemplo n.º 1
0
Archivo: notas.cs Proyecto: 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));
            }
        }
Ejemplo n.º 2
0
Archivo: notas.cs Proyecto: 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);
 }
Ejemplo n.º 3
0
Archivo: notas.cs Proyecto: hvzzzz/-
        // --------------------------------------------------------------
        public string Convertir()
        {
            // ---- Declarar objetos
            CPila           pila = new CPila();
            StringTokenizer st   = new StringTokenizer(Expresion, "+-*/^() ", true);
            string          token;
            string          expresionPosFijo = "";

            // ---- Convertir expresión, descomponiendo en tokens
            if (st.countTokens() > 0)
            {
                do
                {
                    token            = st.nextToken();
                    expresionPosFijo = ProcesarToken(token, pila, expresionPosFijo);
                } while (st.hasMoreTokens());
            }
            // ----- Desapilar todos los operadores que quedan en la pila
            while (!pila.EsVacia())
            {
                // ----- Agregar operador a la expresión PosFijo
                expresionPosFijo = expresionPosFijo + (string)pila.Cima();
                // ----- Desapilar operador
                pila.Desapilar();
            }
            return(expresionPosFijo);
        }
Ejemplo n.º 4
0
Archivo: notas.cs Proyecto: hvzzzz/-
        //-----------------------------------------------------------------
        public float Evaluar(string expresion)
        {
            // ----- Declarar objetos
            CPila           pila;
            StringTokenizer st;
            string          token;

            // ----- Crear un objeto pila
            pila = new CPila();
            // ----- Crear un objeto StringTokenizer
            st = new StringTokenizer(expresion, "+-*/^ ", true);

            // ----- Evaluar expresión, descomponiendo en tokens
            if (st.countTokens() > 0)
            {
                do
                {
                    token = st.nextToken();
                    ProcesarToken(token, pila);
                } while (st.hasMoreTokens());
            }
            // ----- Obtener el resultado de la pila
            return((float)pila.Cima());
        }