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);
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }