public static bool Test() { string expresion = "G x * raizcuarta sin"; try { CalculadoraRPN calc = new CalculadoraRPN(); calc.EvaluarExpresion(expresion).ToString(); return true; } catch { return false; } }
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); }