public Formula Create() { int sum = 0; int i; FormulaOperator operation; Formula formula = new Formula(); for (i = 0; i <= countOfOperations; i++) { if (i == 0) { operation = new FormulaOperator(); operation.Number = random.Next(numberRange.Min, numberRange.Max); sum = sum + operation.Number; formula.AddOperator(operation); } else { if (random.Next(0, 1) > 0) { operation = new FormulaOperator(); operation.Method = FormulaMethod.Addition; operation.Number = random.Next(numberRange.Min, numberRange.Max); sum = sum + operation.Number; formula.AddOperator(operation); CheckSum(ref sum, formula); } else { operation = new FormulaOperator(); operation.Method = FormulaMethod.Subtraction; operation.Number = random.Next(numberRange.Min, numberRange.Max); sum = sum - operation.Number; formula.AddOperator(operation); CheckSum(ref sum, formula); } } } formula.Result = sum; return(formula); }
protected virtual void GenerateFormulaArray(System.Collections.ArrayList list) { int i, k; for (i = this.numberRange1.Min; i <= this.numberRange1.Max; i++) { for (k = this.numberRange2.Min; k <= this.numberRange2.Max; k++) { Formula formula = new Formula(); formula.AddOperator(FormulaOperator.NoneOperator(i)); formula.AddOperator(FormulaOperator.MultiplicationOperator(k)); formula.Result = i * k; list.Add(formula); } } }
protected override void GenerateFormulaArray(ArrayList list) { int i, k; for (i = this.NumberRange1.Min; i <= this.NumberRange1.Max; i++) { for (k = this.NumberRange2.Min; k <= this.NumberRange2.Max; k++) { int leftValue = i * k; Formula formula = new Formula(); formula.AddOperator(FormulaOperator.NoneOperator(leftValue)); formula.AddOperator(FormulaOperator.DivisionOperator(i)); formula.Result = k; list.Add(formula); } } }
/// <summary> /// 检查结果是否在结果要求范围内 /// </summary> /// <param name="sum"></param> /// <param name="formula"></param> private void CheckSum(ref int sum, Formula formula) { if (sum > resultRange.Max) { // 结果修正 int resultAmend = random.Next(sum - resultRange.Max + 1, sum); formula.Operators[formula.Operators.Count - 1].Number -= resultAmend; sum = sum - resultAmend; formula.Result = sum; } if (sum < resultRange.Min) { // 结果修正 int resultAmend = random.Next(Math.Min(resultRange.Max * (-1), sum - 1) , Math.Max(resultRange.Max * (-1), sum - 1)); FormulaOperator amendOper = new FormulaOperator(); if (resultAmend < 0) { amendOper.Method = FormulaMethod.Addition; amendOper.Number = Math.Abs(resultAmend); } else { amendOper.Method = FormulaMethod.Subtraction; amendOper.Number = Math.Abs(resultAmend); } FormulaOperator newOne = FormulaOperator.Combine(formula.Operators[formula.Operators.Count - 1], amendOper); formula.Operators[formula.Operators.Count - 1] = newOne; sum = sum - resultAmend; formula.Result = sum; } }