Esempio n. 1
0
        public static bool Test()
        {
            string expresion = "G x * raizcuarta sin";

            try
            {
                CalculadoraRPN calc = new CalculadoraRPN();

                calc.EvaluarExpresion(expresion).ToString();
                return true;
            }
            catch
            {
                return false;
            }
        }
Esempio n. 2
0
        public static bool Test(string expresion, string[] variables)
        {
            try
            {
                CalculadoraRPN calc = new CalculadoraRPN();
                Random ran = new Random();

                for (int i = 0; i < variables.Length; i++)
                {
                    calc.DefinirVariable(variables[i], ran.Next());
                }

                calc.EvaluarExpresion(expresion).ToString();

                return true;
            }
            catch
            {
                return false;
            }
        }
        public CalculadoraInfija()
        {
            calc = new CalculadoraRPN();

            variables = new SortedList<string, double>();
            constantes = new SortedList<string, double>();
            fun1 = new SortedList<string, Operacion1Delegate>();
            fun2 = new SortedList<string, Operacion2Delegate>();
            fun3 = new SortedList<string, Operacion3Delegate>();
            oper = new SortedList<string, OperadorInfijoDelegate>();
            post = new SortedList<string, OperadorPostfijoDelegate>();
            preced = new SortedList<string, int>();
            asoc = new SortedList<string, Asociatividad>();

            calc.Variables = variables;
            calc.Funciones1 = fun1;
            calc.Funciones2 = fun2;
            calc.Funciones3 = fun3;
            calc.Constantes = constantes;
            calc.OperadoresInfijos = oper;
            calc.OperadoresPostfijos = post;

            fun1.Add("sqrt", new Operacion1Delegate(OperacionesMatematicas.RaizCuadrada));
            fun1.Add("cbrt", new Operacion1Delegate(OperacionesMatematicas.RaizCubica));
            fun1.Add("ln", new Operacion1Delegate(OperacionesMatematicas.LogaritmoNeperiano));
            fun1.Add("log10", new Operacion1Delegate(OperacionesMatematicas.Logaritmo10));
            fun1.Add("log2", new Operacion1Delegate(OperacionesMatematicas.Logaritmo10));
            fun1.Add("sin", new Operacion1Delegate(OperacionesMatematicas.Sin));
            //fun1.Add("sen", new Operacion1Delegate(OperacionesMatematicas.Sin));
            fun1.Add("cos", new Operacion1Delegate(OperacionesMatematicas.Cos));
            fun1.Add("tan", new Operacion1Delegate(OperacionesMatematicas.Tan));
            //fun1.Add("tg", new Operacion1Delegate(OperacionesMatematicas.Tan));
            fun1.Add("asin", new Operacion1Delegate(OperacionesMatematicas.Asin));
            //fun1.Add("asen", new Operacion1Delegate(OperacionesMatematicas.Asin));
            fun1.Add("acos", new Operacion1Delegate(OperacionesMatematicas.Acos));
            fun1.Add("atan", new Operacion1Delegate(OperacionesMatematicas.Atan));
            fun1.Add("arcsin", new Operacion1Delegate(OperacionesMatematicas.Asin));
            //fun1.Add("arcsen", new Operacion1Delegate(OperacionesMatematicas.Asin));
            fun1.Add("arccos", new Operacion1Delegate(OperacionesMatematicas.Acos));
            fun1.Add("arctan", new Operacion1Delegate(OperacionesMatematicas.Atan));
            fun1.Add("csc", new Operacion1Delegate(OperacionesMatematicas.Csc));
            //fun1.Add("cosec", new Operacion1Delegate(OperacionesMatematicas.Csc));
            fun1.Add("sec", new Operacion1Delegate(OperacionesMatematicas.Sec));
            fun1.Add("cot", new Operacion1Delegate(OperacionesMatematicas.Cot));
            //fun1.Add("cotg", new Operacion1Delegate(OperacionesMatematicas.Cot));
            fun1.Add("acsc", new Operacion1Delegate(OperacionesMatematicas.Acsc));
            //fun1.Add("acosec", new Operacion1Delegate(OperacionesMatematicas.Acsc));
            fun1.Add("asec", new Operacion1Delegate(OperacionesMatematicas.Asec));
            fun1.Add("acot", new Operacion1Delegate(OperacionesMatematicas.Acot));
            //fun1.Add("acotg", new Operacion1Delegate(OperacionesMatematicas.Acot));
            //fun1.Add("arccsc", new Operacion1Delegate(OperacionesMatematicas.Acsc));
            //fun1.Add("arccosec", new Operacion1Delegate(OperacionesMatematicas.Acsc));
            //fun1.Add("arcsec", new Operacion1Delegate(OperacionesMatematicas.Asec));
            //fun1.Add("arccot", new Operacion1Delegate(OperacionesMatematicas.Acot));
            //fun1.Add("arccotg", new Operacion1Delegate(OperacionesMatematicas.Acot));
            fun1.Add("sgn", new Operacion1Delegate(OperacionesMatematicas.Signo));
            fun1.Add("int", new Operacion1Delegate(OperacionesMatematicas.ParteEntera));
            fun1.Add("floor", new Operacion1Delegate(OperacionesMatematicas.Floor));
            fun1.Add("ceil", new Operacion1Delegate(OperacionesMatematicas.Ceiling));
            fun1.Add("abs", new Operacion1Delegate(OperacionesMatematicas.Abs));
            fun1.Add("neg", new Operacion1Delegate(OperacionesMatematicas.Neg));
            fun1.Add("not", new Operacion1Delegate(OperacionesMatematicas.LogicalNot));

            fun2.Add("add", new Operacion2Delegate(OperacionesMatematicas.Suma));
            fun2.Add("sub", new Operacion2Delegate(OperacionesMatematicas.Resta));
            fun2.Add("mul", new Operacion2Delegate(OperacionesMatematicas.Multiplicacion));
            fun2.Add("div", new Operacion2Delegate(OperacionesMatematicas.Division));
            fun2.Add("pow", new Operacion2Delegate(OperacionesMatematicas.Potencia));
            fun2.Add("mod", new Operacion2Delegate(OperacionesMatematicas.Modulo));
            fun2.Add("log", new Operacion2Delegate(OperacionesMatematicas.Logaritmo));
            fun2.Add("root", new Operacion2Delegate(OperacionesMatematicas.Raiz));
            //fun2.Add("raiz", new Operacion2Delegate(OperacionesMatematicas.Raiz));
            fun2.Add("max", new Operacion2Delegate(OperacionesMatematicas.Max));
            fun2.Add("min", new Operacion2Delegate(OperacionesMatematicas.Min));
            fun2.Add("and", new Operacion2Delegate(OperacionesMatematicas.LogicalAnd));
            fun2.Add("or", new Operacion2Delegate(OperacionesMatematicas.LogicalOr));

            DefinirOperacion("+", OperacionesMatematicas.Suma, 3, Asociatividad.Izquierda);
            DefinirOperacion("-", OperacionesMatematicas.Resta, 3, Asociatividad.Izquierda);
            DefinirOperacion("*", OperacionesMatematicas.Multiplicacion, 4, Asociatividad.Izquierda);
            DefinirOperacion("/", OperacionesMatematicas.Division, 4, Asociatividad.Izquierda);
            DefinirOperacion("%", OperacionesMatematicas.Modulo, 4, Asociatividad.Izquierda);
            DefinirOperacion("^", OperacionesMatematicas.Potencia, 5, Asociatividad.Izquierda);
            DefinirOperacion("C", OperacionesMatematicas.Potencia, 6, Asociatividad.Izquierda);
            DefinirOperacion("|", OperacionesMatematicas.LogicalOr, 7, Asociatividad.Derecha);
            DefinirOperacion("&", OperacionesMatematicas.LogicalAnd, 8, Asociatividad.Derecha);

            post.Add("!", new OperadorPostfijoDelegate(OperacionesMatematicas.Factorial));

            //Ans
            DefinirVariable("ans", 0);

            //Constantes matemáticas
            DefinirConstante("pi", Math.PI);
            DefinirConstante("e", Math.E);
            DefinirConstante("phi", 1.618033988749894848);

            //Constants Fisico-Quimicas
            DefinirConstante("c", 299792458);
            DefinirConstante("G", 6.6743e-11);
            DefinirConstante("g", 9.80665);
            DefinirConstante("h", 6.62606896e-34);
            DefinirConstante("R", 8.314472);
            DefinirConstante("Na", 6.0221415e23);
            DefinirConstante("mu0", Math.PI * 4E-7);
            DefinirConstante("epsilon0", 8.854187817620E-12);
        }