//高级难度算式构造,整数与分数、分数与分数的混合运算 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); }
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(); } } }
//中级难度算式构造,包含加、减、乘的任意两个,当结果出现负号时,用括号将结果纠正 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; }
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); }
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); }
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); }
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); }
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); }
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(); }
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); } }
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); }
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); }
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) { }
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); }
public override void PressButtonPoint(CalculatorCore core) { SetState(core, new SecondOperandIntroductionCalculatorCoreState()); AssignEnteredValueToTextBox("0.", core); }