Example #1
0
        //高级难度算式构造,整数与分数、分数与分数的混合运算
        private static string CDifficultFormula(int[] opds, char[] ops)
        {
            string formula = null;
            string fraction1;
            string fraction2;

            char op1 = ops[ran.Next(0, 3)];
            char op2 = ops[3];

            CompareAndChange(ref opds[0], ref opds[1]);
            fraction1 = opds[1].ToString() + op2 + opds[0].ToString();

            CompareAndChange(ref opds[2], ref opds[3]);
            fraction2 = opds[3].ToString() + op2 + opds[2].ToString();

            if (0 == ran.Next(1, 100) % 2)//余数为0,分数与整数运算,为1,分数与分数运算
            {
                formula = fraction1 + op1 + opds[2].ToString();
                if (CalculatorCore.Calculate(formula) < 0)
                {
                    formula = opds[2].ToString() + op1 + fraction1;
                }
            }
            else
            {
                formula = fraction1 + op1 + fraction2;
                if (CalculatorCore.Calculate(formula) < 0)
                {
                    formula = fraction2 + op1 + fraction1;
                }
            }

            return(formula);
        }
        public void Sum()
        {
            var    t    = new CalculatorCore();
            object ered = t.Feldolgoz("3+5");

            Assert.AreEqual(8, ered);
        }
Example #3
0
        public void OnButtonCalculate(object o, EventArgs e)
        {
            Button btn = (Button)o;

            if (txFirstNum.Text != "" && txSecondNum.Text != "")
            {
                var num1 = Convert.ToInt32(txFirstNum.Text);
                var num2 = Convert.ToInt32(txSecondNum.Text);
                if (btn.Text == "+")
                {
                    txResult.Text = CalculatorCore.Add(num1, num2).ToString();
                }
                else if (btn.Text == "-")
                {
                    txResult.Text = CalculatorCore.Subtract(num1, num2).ToString();
                }
                else if (btn.Text == "x")
                {
                    txResult.Text = CalculatorCore.Multiply(num1, num2).ToString();
                }
                else if (btn.Text == "÷")
                {
                    txResult.Text = CalculatorCore.Divide(num1, num2).ToString();
                }
            }
        }
Example #4
0
        //中级难度算式构造,包含加、减、乘的任意两个,当结果出现负号时,用括号将结果纠正
        private static string CMediumFormula(int[] opds, char[] ops)
        {
            string formula = null;

            char op1 = ops[ran.Next(0, 3)];
            char op2 = ops[ran.Next(0, 3)];

            if (op1 == '-')
            {
                CompareAndChange(ref opds[0], ref opds[1]);
            }

            formula = opds[0].ToString() + op1 + opds[1].ToString() + op2 + opds[2].ToString();

            if (CalculatorCore.Calculate(formula) < 0)
            {
                if (op1 == '-')
                {
                    CompareAndChange(ref opds[0], ref opds[1]);
                    formula = "(" + opds[0].ToString() + op1 + opds[1].ToString() + ")" + op2 + opds[2].ToString();
                    if (CalculatorCore.Calculate(formula) < 0)
                    {
                        formula = opds[2].ToString() + op2 + "(" + opds[0].ToString() + op1 + opds[1].ToString() + ")";
                    }
                }
                else
                {
                    CompareAndChange(ref opds[1], ref opds[2]);
                    formula = opds[0].ToString() + op1 + "(" + opds[1].ToString() + op2 + opds[2].ToString() + ")";
                }
            }

            return(formula);
        }
        public void Add__ValuesContainNaN_ReturnsZero()
        {
            CalculatorCore calc     = new CalculatorCore();
            double         expected = 0;
            double         actual   = calc.Add(float.NaN, 5);

            Assert.AreEqual(expected, actual);
        }
        public void Add_NoValues_ReturnsZero()
        {
            CalculatorCore calc     = new CalculatorCore();
            double         expected = 0;
            double         actual   = calc.Add();

            Assert.AreEqual(expected, actual);
        }
        public void Add__Five5s_Returns25()
        {
            CalculatorCore calc     = new CalculatorCore();
            double         expected = 0;
            double         actual   = calc.Add(5, 5, 5, 5, 5);

            Assert.AreEqual(expected, actual);
        }
        public CalculatorResponse Handle()
        {
            var values  = _input.Split(',');
            var numbers = new List <double>();
            var result  = double.NaN;
            CalculatorResponse response;

            try
            {
                if (values.Length <= 1)
                {
                    return(response = new CalculatorResponse
                    {
                        Status = "Error",
                        Message = "Input 2 or more numbers for division",
                    });
                }

                foreach (var value in values)
                {
                    numbers.Add(double.Parse(value.Trim()));
                }

                if (numbers != null)
                {
                    var calc = new CalculatorCore();

                    if (numbers.Any(n => n == 0))
                    {
                        return response = new CalculatorResponse
                        {
                                   Status  = "Error",
                                   Message = "Division by Zero not allowed.",
                        }
                    }
                    ;

                    result = calc.Divide(numbers.ToArray());
                }

                return(response = new CalculatorResponse
                {
                    _Result = result,
                    Status = "Success"
                });
            }
            catch (Exception ex)
            {
                _logger.LogError($"Invalid input : {ex.StackTrace}");
                return(new CalculatorResponse
                {
                    Status = "Error",
                    Message = ($"Invalid input : {ex.Message}")
                });
            }
        }
        public WeaponPanelSimulator()
        {
            InitializeComponent();

            Fc = this.Resources["FcModel"] as FilterCondition;
            CC = this.Resources["CCModel"] as CalculatorCore;

            ((CollectionViewSource)this.Resources["cvsWeaponList"]).Source      = WeaponList;
            ((CollectionViewSource)this.Resources["cvsWeaponSearchTip"]).Source = WeaponSearchTip;

            this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            this.Loaded += WeaponPanelSimulator_Loaded;
        }
Example #10
0
        public void Subtract_should_return_NaN_when_overflow_occurs()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Subtract(double.MinValue, -1);
            var result2 = calc.Subtract(double.MinValue * -0.5, double.MinValue * 0.5, double.MinValue * 0.5);

            // Assert
            result.Should().Be(double.NaN);
            result2.Should().Be(double.NaN);
        }
Example #11
0
        public void Divide_should_return_NaN_when_devided_by_zero()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Divide(4, 0);
            var result2 = calc.Divide(double.MaxValue, 1);

            // Assert
            result.Should().Be(double.NaN);
            result2.Should().Be(double.NaN);
        }
Example #12
0
        public void Subtract_should_return_difference()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Subtract(2, 1);
            var result2 = calc.Subtract(-2, -1);
            var result3 = calc.Subtract(-2, -1, 1, 5, 6);

            // Assert
            result.Should().Be(1);
            result2.Should().Be(-1);
            result3.Should().Be(-13);
        }
Example #13
0
        public void Divide_should_return_fraction()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Divide(4, 2);
            var result2 = calc.Divide(-4, -2);
            var result3 = calc.Divide(-4, -2, 2, 1);

            // Assert
            result.Should().Be(2);
            result2.Should().Be(2);
            result3.Should().Be(1);
        }
Example #14
0
        public void Multiply_should_return_NaN_when_overflow_occurs()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Multiply(double.MaxValue, 2);
            var result2 = calc.Multiply(double.MinValue, 2);
            var result3 = calc.Multiply(double.MaxValue * 0.5, double.MaxValue * 0.5, 2);

            // Assert
            result.Should().Be(double.NaN);
            result2.Should().Be(double.NaN);
            result3.Should().Be(double.NaN);
        }
Example #15
0
        public void Multiply_should_return_product()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Multiply(2, 2);
            var result2 = calc.Multiply(-2, -2);
            var result3 = calc.Multiply(-2.5, 2);
            var result4 = calc.Multiply(2, 2, 2, 2, 2);

            // Assert
            result.Should().Be(4);
            result2.Should().Be(4);
            result3.Should().Be(-5);
            result4.Should().Be(32);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string szam = sender.ToString().Substring((sender.ToString().Length - 1));

            if (szam == "=")
            {
                CalculatorCore t    = new CalculatorCore();
                object         ered = t.Feldolgoz(kijelzo.Text);
                //t.Feldolgoz()
                kijelzo.Text = ered.ToString();
            }
            else
            {
                kijelzo.Text = kijelzo.Text + szam;
            }
            //   kijelzo.Text = szam;//sender.ToString();
        }
Example #17
0
 public override void PressEqualButton(CalculatorCore core)
 {
     SetState(core, new ResultCalculatorCoreState());
     try
     {
         Summarize(core);
     }
     catch (DivideByZeroException e)
     {
         SetState(core, new ExceptionCalculatorCoreState());
         AssignEnteredValueToTextBox(e.Message, core);
     }
     catch (OverflowException e)
     {
         SetState(core, new ExceptionCalculatorCoreState());
         AssignEnteredValueToTextBox(e.Message, core);
     }
 }
Example #18
0
        public void Add_should_return_sum_when_input_is_valid()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result  = calc.Add(1, 2);
            var result2 = calc.Add(-1, -2);
            var result3 = calc.Add(-1.5, -2.8);
            var result4 = calc.Add(1, 2, 3, 4);

            // Assert
            //Assert.Equal(3 , result);
            result.Should().Be(3);
            result2.Should().Be(-3);
            result3.Should().Be(-4.3);
            result4.Should().Be(10);
        }
Example #19
0
        public void Add_should_return_NaN_when_overflow_occurs()
        {
            // Arrange
            var calc = new CalculatorCore();

            // Act
            var result = calc.Add(double.MaxValue, 1);

            // Assert
            result.Should().Be(double.NaN);

            // Sum exceeding Max/Min value
            var result2 = calc.Add(double.MaxValue * 0.5, double.MaxValue * 0.5);
            var result3 = calc.Add(double.MinValue * 0.5, double.MinValue * 0.5);
            var result4 = calc.Add(double.MinValue * 0.5, double.MinValue * 0.5, double.MinValue * 0.5);

            // Assert
            result2.Should().Be(double.NaN);
            result3.Should().Be(double.NaN);
            result4.Should().Be(double.NaN);
        }
        public double PreformCalculation()
        {
            ICalculatorCore calculatorCore = new CalculatorCore();

            if (mSelectedMathOperation == MathOperation.Add.ToString())
            {
                return(calculatorCore.AdditionOperation(mNumber1, mNumber2));
            }
            else if (mSelectedMathOperation == MathOperation.Subtract.ToString())
            {
                return(calculatorCore.SubtractionOperation(mNumber1, mNumber2));
            }
            else if (mSelectedMathOperation == MathOperation.Multiply.ToString())
            {
                return(calculatorCore.MultiplicationOperation(mNumber1, mNumber2));
            }
            else if (mSelectedMathOperation == MathOperation.Divide.ToString())
            {
                return(calculatorCore.DivisionOperation(mNumber1, mNumber2));
            }
            return(double.NaN);
        }
Example #21
0
        static Random ran = new Random(GetRandomSeed());//产生不重复的随机数

        //生成算式,complexity表示题的难易程度,范围(0、1、2)
        public static string CFormula(int complexity)
        {
            string formula;

            char[] operators = { '+', '-', '*', '/' };
            int[]  operands  = new int[4];

            for (int i = 0; i < operands.Length; i++)
            {
                operands[i] = ran.Next(1, 10);//构造四个操作数
                if (i > 0)
                {
                    while (operands[i] == operands[i - 1])
                    {
                        operands[i] = ran.Next(1, 10);//确保操作数不相同
                    }
                }
            }

            if (0 == complexity)
            {
                formula = CEasyFormula(operands, operators);
            }
            else if (1 == complexity)
            {
                formula = CMediumFormula(operands, operators);
            }
            else
            {
                formula = CDifficultFormula(operands, operators);
            }

            double?num = CalculatorCore.Calculate(formula); //计算算式的结果

            return(formula + "=" + num);
        }
 public override void PressEqualButton(CalculatorCore core)
 {
 }
 public override void PressButtonPoint(CalculatorCore core)
 {
     SetState(core, new FirstOperandIntroductionCalculatorCoreState());
     AddValueToEndOfTextBox("0.", core);
 }
 public override void PressBinaryOperationButton(BinaryOperations binaryOperation, CalculatorCore core)
 {
     SetState(core, new BinaryOperationIntroductionCalculatorCoreState());
     ApplyFirstBinaryOperation(binaryOperation, core);
 }
 public override void PressButtonBack(CalculatorCore core)
 {
 }
 public override void PressNegateButton(CalculatorCore core)
 {
 }
Example #27
0
 public override void PressNegateButton(CalculatorCore core)
 {
     SetState(core, new SecondOperandIntroductionCalculatorCoreState());
     NegateTextBox(core);
 }
        public void Add_NegitiveValue_ThrowsInvalidOperationException()
        {
            CalculatorCore calc = new CalculatorCore();

            calc.Add(5, 5, 5, 5, -5);
        }
 public override void PressButtonDigits(byte digit, CalculatorCore core)
 {
     SetState(core, new FirstOperandIntroductionCalculatorCoreState());
     AssignEnteredValueToTextBox(digit.ToString(core.Culture), core);
 }
Example #30
0
 public override void PressButtonPoint(CalculatorCore core)
 {
     SetState(core, new SecondOperandIntroductionCalculatorCoreState());
     AssignEnteredValueToTextBox("0.", core);
 }