Ejemplo n.º 1
0
        private static string parse_Equation(char[] expr,   int index)
        {
            CalculatorLogic cl = new CalculatorLogic();

            string num = "";
            if((int)expr[index]==83){
                index += 4;
                if((int)expr[index]==32){
                    for(int i = index; i<= expr.Length-2;i++)
                     num += expr [i].ToString();
                }
                double srt_num = double.Parse (num);
                IUnaryOperator sqrt = new Sqrt ();
                return Convert.ToString(sqrt.perform (srt_num));
            }
            if((int)expr[index]==82){
                index += 10;
                if((int)expr[index]==32){
                    for(int i = index; i<= expr.Length-2;i++)
                        num += expr [i].ToString();
                }
                double srt_num = double.Parse (num);
                IUnaryOperator reci = new Reciprocal ();
                return Convert.ToString(reci.perform (srt_num));
            }
            if((int)expr[index]==78){
                index += 6;
                if((int)expr[index]==32){
                    for(int i = index; i<= expr.Length-2;i++)
                        num += expr [i].ToString();
                }
                double srt_num = double.Parse (num);
                IUnaryOperator neg = new Negate ();
                return Convert.ToString(neg.perform (srt_num));
            }
            while (index != expr.Length - 1) {
                double x = getDouble (expr, ref index);
                char op = expr [index];

                index++;

                if (op == '\r') {
                    cl.AcceptNumber (x, null);
                    string result = cl.Equals ();
                    return result;
                }
                perform_op (x, op, cl);

            }
            return "";
            //return value;
        }
Ejemplo n.º 2
0
        // evaluator

        private void btnEq_Click(object sender, EventArgs e)
        {
            Expression expression;
            Double     sndArgument = new Double();


            if (textBoxRes.Text.Equals("x") || textBoxRes.Text.Equals("y") || textBoxRes.Text.Equals("z"))
            {
                using (var form = new CalculatorValueForVariables())
                {
                    var result = form.ShowDialog();
                    if (result == DialogResult.OK)
                    {
                        sndArgument = form.varValue;
                    }
                }
            }
            else
            {
                sndArgument = Double.Parse(textBoxRes.Text);
            }

            switch (calcOperator)
            {
            case "sqrt":
                if (!(resultValue < 0))
                {
                    expression      = new Sqrt(resultValue);
                    finalValue      = expression.Evaluate();
                    textBoxRes.Text = finalValue.ToString();
                }
                else
                {
                    textBoxRes.Text = "Can't calculate sqrt of a neg num!";
                }
                break;

            case "neg":
                expression      = new Opposite(resultValue);
                finalValue      = expression.Evaluate();
                textBoxRes.Text = finalValue.ToString();
                break;

            case "cos":
                expression      = new Cosinus(resultValue);
                finalValue      = expression.Evaluate();
                textBoxRes.Text = finalValue.ToString();
                break;

            case "sin":
                expression      = new Sinus(resultValue);
                finalValue      = expression.Evaluate();
                textBoxRes.Text = finalValue.ToString();
                break;

            case "exp":
                expression      = new Exponentation(resultValue);
                finalValue      = expression.Evaluate();
                textBoxRes.Text = finalValue.ToString();
                break;

            case "abs":
                expression      = new Abs(resultValue);
                finalValue      = expression.Evaluate();
                textBoxRes.Text = finalValue.ToString();
                break;

            case "log":
                if (resultValue > 0)
                {
                    expression      = new Log(resultValue);
                    finalValue      = expression.Evaluate();
                    textBoxRes.Text = finalValue.ToString();
                }
                else
                {
                    textBoxRes.Text = "Can't calculate log of a neg num!";
                }
                break;

            case "+":
                labelCurrentExpr.Text += sndArgument;
                expression             = new Addition(resultValue, sndArgument);
                finalValue             = expression.Evaluate();
                textBoxRes.Text        = finalValue.ToString();
                break;

            case "-":
                labelCurrentExpr.Text += sndArgument;
                expression             = new Subtraction(resultValue, sndArgument);
                finalValue             = expression.Evaluate();
                textBoxRes.Text        = finalValue.ToString();
                break;

            case "*":
                labelCurrentExpr.Text += sndArgument;
                expression             = new Multiplication(resultValue, sndArgument);
                finalValue             = expression.Evaluate();
                textBoxRes.Text        = finalValue.ToString();
                break;

            case "/":
                labelCurrentExpr.Text += sndArgument;
                if (!sndArgument.Equals(0))
                {
                    expression      = new Division(resultValue, sndArgument);
                    finalValue      = expression.Evaluate();
                    textBoxRes.Text = finalValue.ToString();
                }
                else
                {
                    textBoxRes.Text = "Can't divide by 0";
                }
                break;

            case "^":
                labelCurrentExpr.Text += sndArgument;
                expression             = new Power(resultValue, sndArgument);
                finalValue             = expression.Evaluate();
                textBoxRes.Text        = finalValue.ToString();
                break;

            case "%":
                labelCurrentExpr.Text += sndArgument;
                expression             = new Modulo(resultValue, sndArgument);
                finalValue             = expression.Evaluate();
                textBoxRes.Text        = finalValue.ToString();
                break;
            }
            resultValue           = 0;
            labelCurrentExpr.Text = "";
        }
Ejemplo n.º 3
0
 void CreateOperators()
 {
     // Only one of each operation Token needs to be created
     opAdd = new Add(workStack);
     opSubtract = new Subtract(workStack);
     opMultiply = new Multiply(workStack);
     opDivide = new Divide(workStack);
     opPower = new Power(workStack);
     opBracket = new Bracket();
     opUnaryMinus = new UnaryMinus(workStack);
     opUnaryPlus = new UnaryPlus();
     opSqrt = new Sqrt(workStack);
     opSin = new Sin(workStack);
     opCos = new Cos(workStack);
     opTan = new Tan(workStack);
     opLog = new Log(workStack);
     opAsin = new Asin(workStack);
     opAcos = new Acos(workStack);
     opAtan = new Atan(workStack);
     functions = new Dictionary<string, Function>
     {
         {"sqr", opSqrt },
         {"sin", opSin },
         {"cos", opCos },
         {"tan", opTan },
         {"log", opLog },
         {"asin", opAsin },
         {"acos", opAcos },
         {"atan", opAtan }
     };
     binaryOperators = new Dictionary<char, BinaryOperator>
     {
         {'+', opAdd },
         {'-', opSubtract },
         {'*', opMultiply },
         {'/', opDivide },
         {'^',opPower }
     };
 }