示例#1
0
 void Compute(bool isInput, string msg)
 {
     if (isInput)
     {
         currentState = CalcState.Compute;
         if (operation.Length > 0 && (Rules.IsRootSign(msg) || Rules.IsSquareSign(msg) || Rules.IsOneOverXSign(msg) || Rules.IsPlusMinus(msg) || Rules.IsDEL(msg) || Rules.IsFactorial(msg)))
         {
             operation2 = msg;
             Calculate();
             operation2 = "";
         }
         else if (Rules.IsRootSign(msg) || Rules.IsSquareSign(msg) || Rules.IsOneOverXSign(msg) || Rules.IsPlusMinus(msg) || Rules.IsDEL(msg) || Rules.IsFactorial(msg))
         {
             operation = msg;
             if (operation.Length > 0)
             {
                 Calculate();
                 resultDelegate(resultNumber);
             }
             tempNumber = resultNumber;
             operation  = "";
         }
         else if ((Rules.IsPercentSign(msg) || Rules.IsXPowerY(msg)) && operation.Length > 0)
         {
             operation2 = msg;
             if (tempNumber2.Length == 0)
             {
                 tempNumber2 = tempNumber;
                 tempNumber  = "";
             }
             else if (tempNumber.Length > 0 && tempNumber2.Length > 0)
             {
                 Calculate();
                 resultDelegate(tempNumber);
             }
         }
         else
         {
             if (operation.Length > 0)
             {
                 Calculate();
                 resultDelegate(resultNumber);
             }
             else
             {
                 resultNumber = tempNumber;
             }
             operation  = msg;
             tempNumber = "";
         }
     }
     else
     {
         if (Rules.IsDigit(msg))
         {
             AccumulateDigits(true, msg);
         }
         else if (Rules.IsClearSign(msg))
         {
             Zero(true, msg);
         }
         else if (Rules.IsOff(msg))
         {
             Off(true, msg);
         }
         else if (Rules.IsOperator(msg) || Rules.IsXPowerY(msg) || Rules.IsSquareSign(msg) || Rules.IsOneOverXSign(msg) || Rules.IsPlusMinus(msg) || Rules.IsDEL(msg) || Rules.IsFactorial(msg))
         {
             Compute(true, msg);
         }
         else if (Rules.IsDivisibleSign(msg))
         {
             Error(true, msg);
         }
         else if (Rules.IsEqualSign(msg))
         {
             Result(true, msg);
         }
     }
 }
示例#2
0
 void Result(bool isInput, string msg)
 {
     if (isInput)
     {
         currentState = CalcState.Result;
         Calculate();
         resultDelegate(resultNumber);
     }
     else
     {
         if (Rules.IsZero(msg))
         {
             Zero(true, msg);
         }
         else if (Rules.IsNonZeroDigit(msg))
         {
             tempNumber = "";
             AccumulateDigits(true, msg);
         }
         else if (Rules.IsOperator(msg) || Rules.IsXPowerY(msg) || Rules.IsSquareSign(msg) || Rules.IsOneOverXSign(msg) || Rules.IsPlusMinus(msg) || Rules.IsDEL(msg) || Rules.IsFactorial(msg))
         {
             operation  = "";
             tempNumber = resultNumber;
             Compute(true, msg);
         }
         else if (Rules.IsSeparator(msg))
         {
             operation  = "";
             tempNumber = resultNumber;
             AccumulateDigitsWithDecimal(true, msg);
         }
         else if (Rules.IsClearSign(msg))
         {
             Zero(true, msg);
         }
         else if (Rules.IsOff(msg))
         {
             Off(true, msg);
         }
         else if (Rules.IsEqualSign(msg))
         {
             Result(true, msg);
         }
         else if (Rules.IsDivisibleSign(msg))
         {
             Error(true, msg);
         }
     }
 }
示例#3
0
 void AccumulateDigitsWithDecimal(bool isInput, string msg)
 {
     if (isInput)
     {
         currentState = CalcState.AccumulateDigitsWithDecimal;
         tempNumber  += msg;
         resultDelegate(tempNumber);
     }
     else
     {
         if (Rules.IsOperator(msg) || Rules.IsXPowerY(msg) || Rules.IsSquareSign(msg) || Rules.IsOneOverXSign(msg) || Rules.IsPlusMinus(msg) || Rules.IsDEL(msg))
         {
             Compute(true, msg);
         }
         else if (Rules.IsDigit(msg))
         {
             AccumulateDigitsWithDecimal(true, msg);
         }
         else if (Rules.IsEqualSign(msg))
         {
             Result(true, msg);
         }
         else if (Rules.IsClearSign(msg))
         {
             Zero(true, msg);
         }
         else if (Rules.IsOff(msg))
         {
             Off(true, msg);
         }
         else if (Rules.IsDivisibleSign(msg))
         {
             Error(true, msg);
         }
     }
 }