Beispiel #1
0
 void AccumulateDigits(string msg, bool isInput)
 {
     if (isInput)
     {
         calcState   = CalcState.AccumulateDigits;
         tempNumber += msg;
         changeTextDelegate.Invoke(tempNumber);
     }
     else
     {
         if (Rules.IsDigit(msg))
         {
             AccumulateDigits(msg, true);
         }
         else if (Rules.IsOperation(msg))
         {
             Operation(msg, true);
         }
         else if (Rules.IsResult(msg))
         {
             Result(msg, true);
         }
         else if (Rules.IsQuickOperation(msg))
         {
             QuickOperation(msg, true);
         }
         else if (Rules.IsPoint(msg) && isPoint)
         {
             isPoint = false;
             AccumulateDigits(msg, true);
         }
     }
 }
Beispiel #2
0
 public Calculator(ChangeTextDelegate textDelegate)
 {
     state             = CalcState.Zero;
     this.textDelegate = textDelegate;
     textDelegate.Invoke("0");
     tempNumber   = "";
     resultNumber = "";
     operation    = "";
     resultNumOfComplexOperation = "";
     extraNumber    = "";
     numberInMemory = "";
 }
Beispiel #3
0
 void AccumulateDigits(string msg, bool isInput)
 {
     if (isInput)
     {
         calcState   = CalcState.AccumulateDigits;
         tempNumber += msg;
         changeTextDelegate.Invoke(tempNumber);
     }
     else
     {
         if (Rules.IsDigit(msg))
         {
             AccumulateDigits(msg, true);
         }
         else if (Rules.IsOperation(msg) || Rules.IsOneOperation(msg) || Rules.IsPlusMinus(msg) || Rules.IsDelete(msg))
         {
             Compute(msg, true);
         }
         else if (Rules.IsEqualSign(msg) && operation.Length != 0)
         {
             Result(msg, true);
         }
         else if (Rules.IsSeparator(msg))
         {
             AccumulateDigitsWithDecimal(msg, true);
         }
         else if (Rules.IsC(msg))
         {
             Zero(msg, true);
         }
         else if (Rules.IsCE(msg))
         {
             tempNumber = "";
             AccumulateDigits(tempNumber, true);
         }
     }
 }
Beispiel #4
0
 public void AccumulateDigit(String msg, bool input)
 {
     if (input)
     {
         state       = CalcState.AccumulateDigit;
         tempNumber += msg;
         textDelegate.Invoke(tempNumber);
     }
     else
     {
         if (Rules.IsDigit(msg))
         {
             AccumulateDigit(msg, true);
         }
         if (Rules.IsOperation(msg))
         {
             Operation(msg, true);
         }
         if (Rules.IsEqual(msg))
         {
             Result(msg, true);
         }
     }
 }
Beispiel #5
0
 public void Separator(string msg, bool input)
 {
     if (input)
     {
         if (!(tempNumber.Contains(",")))
         {
             state       = CalcState.Separator;
             tempNumber += msg;
             textDelegate.Invoke(tempNumber);
         }
     }
     else
     {
         if (Rules.IsDigit(msg))
         {
             AccumulateDigit(msg, true);
         }
         if (Rules.IsClear(msg))
         {
             Clear(msg, true);
         }
     }
 }
Beispiel #6
0
 public void Calc()
 {
     changeDelegate.Invoke((a + b).ToString());
 }
 public void ChangeText(String msg)
 {
     changeTextDelegate.Invoke(msg);
 }
Beispiel #8
0
 public void Calc()
 {
     ChangeText.Invoke(a + b + "");
 }
Beispiel #9
0
        void AccumulateDigits(string msg, bool isInput)
        {
            if (isInput)
            {
                calcState = CalcState.AccumulateDigits;

                if (msg == "," && secondNumber.Contains(',') == false)
                {
                    secondNumber = "0,";
                    changeTextDelegate.Invoke(secondNumber);
                }

                else
                {
                    secondNumber += msg;
                    changeTextDelegate.Invoke(secondNumber);
                }
            }

            else
            {
                if (Rules.IsDigit(msg))
                {
                    secondNumber += msg;
                    changeTextDelegate.Invoke(secondNumber);
                }

                else if (Rules.IsSeparator(msg))
                {
                    if (secondNumber.Contains(',') == false)
                    {
                        secondNumber += ",";
                        changeTextDelegate.Invoke(secondNumber);
                    }
                }

                else if (Rules.IsChangingSign(msg))
                {
                    if (secondNumber[0] == '-')
                    {
                        secondNumber = secondNumber.Remove(0, 1);
                    }
                    else
                    {
                        secondNumber = "-" + secondNumber;
                    }

                    changeTextDelegate.Invoke(secondNumber);
                }

                else if (Rules.IsOperation(msg))
                {
                    Operation(msg, true);
                    reccuring.Add(msg);
                    string text = string.Join(" ", reccuring.ToArray());
                    changeRecurringTextDelegate.Invoke(text);
                }

                else if (Rules.IsPercent(msg))
                {
                    if (operation == "+" || operation == "-")
                    {
                        CalculatePercent();
                    }
                    else if (operation == "x" || operation == "÷")
                    {
                        CalculateSecondPercent();
                    }
                    changeTextDelegate.Invoke(secondNumber);
                }

                else if (Rules.IsResult(msg))
                {
                    Result(msg, true);
                }

                else if (Rules.IsFullReset(msg))
                {
                    FullReset();
                }

                else if (Rules.IsReset(msg))
                {
                    Reset();
                }

                else if (Rules.IsBackspace(msg))
                {
                    secondNumber = secondNumber.Remove(secondNumber.Length - 1);
                    changeTextDelegate.Invoke(secondNumber);

                    if (secondNumber.Length <= 0)
                    {
                        changeTextDelegate.Invoke("0");
                    }
                }

                else if (Rules.IsMemoryOperation(msg))
                {
                    MemorySave(msg, true);
                }

                else if (Rules.IsSinCos(msg))
                {
                    SinCos(msg, true);
                }

                else if (msg == "Mod")
                {
                    Modulo(msg, true);
                }

                else if (msg == "log")
                {
                    Logarithm(msg, true);
                }

                else if (msg == "x^y")
                {
                    ParticularPower(msg, true);
                }

                else if (msg == "10^x")
                {
                    PowerOfTen(msg, true);
                }

                else if (msg == "n!")
                {
                    Factorial(msg, true);
                }

                else if (msg == "yrootx")
                {
                    AnyRoot(msg, true);
                }

                else if (msg == ")")
                {
                    reccuring.Add(secondNumber);
                    reccuring.Add(")");
                    string text = string.Join(" ", reccuring.ToArray());
                    changeRecurringTextDelegate.Invoke(text);
                    Expression(msg, true);
                }
            }
        }