Example #1
0
        /// <summary>
        /// Создает строковое представление неравенства
        /// </summary>
        /// <returns></returns>
        string CreateStringRepresentation()
        {
            string result = string.Empty;

            if (Numenator != null && Denominator != null)
            {
                if (Numenator.Count() > 0)
                {
                    foreach (Polynomial poly in Numenator)
                    {
                        result += poly;
                    }
                }
                else
                {
                    result += "1";
                }
                if (Denominator.Count() > 0)
                {
                    result += "/";
                    if (Denominator.Count() > 1)
                    {
                        result += "(";
                    }
                    foreach (Polynomial poly in Denominator)
                    {
                        result += poly;
                    }
                    if (Denominator.Count() > 1)
                    {
                        result += ")";
                    }
                }
            }
            else
            {
                result += $"{IntNumenator}{(IntDenominator != 1 ? $"/{IntDenominator}" : "")}";
            }
            return(result);
        }
Example #2
0
        internal string ToHTML()
        {
            if (Numenator != null && Denominator != null)
            {
                string numenatorHTML = string.Empty;
                if (Numenator.Count() > 1)
                {
                    foreach (var poly in Numenator)
                    {
                        numenatorHTML += $"({poly.ToHTML()})";
                    }
                }
                else if (Numenator.Count() == 1)
                {
                    numenatorHTML += $"{Numenator[0].ToHTML()}";
                }
                else
                {
                    numenatorHTML += "1";
                }

                string denominatorHTML = string.Empty;
                if (Denominator.Count() > 1)
                {
                    foreach (var poly in Denominator)
                    {
                        denominatorHTML += $"({poly.ToHTML()})";
                    }
                }
                else if (Denominator.Count() == 1)
                {
                    denominatorHTML += $"{Denominator[0].ToHTML()}";
                }
                else
                {
                    denominatorHTML = "1";
                }
                if (denominatorHTML == "1")
                {
                    return($"<span class=\"func\">{numenatorHTML}</span>");
                }
                else
                {
                    return($"<span class=\"fraction\"><span class=\"top\">{numenatorHTML}</span><span class=\"bottom\">{denominatorHTML}</span></span>");
                }
            }
            else
            {
                if (GetIntPart() > (double)0)
                {
                    if (IntNumenator % IntDenominator != 0)
                    {
                        return($"<span class=\"answerNumber\">{GetIntPart()}</span><span class=\"fraction answerFraction\"><span class=\"top\">{IntNumenator % IntDenominator}</span>{(IntDenominator != 1 ? $"<span class=\"bottom\">{IntDenominator}</span>" : "")}</span>");
                    }
                    else
                    {
                        return($"{GetIntPart()}");
                    }
                }
                else if (GetIntPart() < (double)0)
                {
                    if (IntNumenator % IntDenominator != 0)
                    {
                        return($"<span class=\"answerNumber\">{GetIntPart()}</span><span class=\"fraction answerFraction\"><span class=\"top\">{-IntNumenator % IntDenominator}</span>{(IntDenominator != 1 ? $"<span class=\"bottom\">{IntDenominator}</span>" : "")}</span>");
                    }
                    else
                    {
                        return($"{GetIntPart()}");
                    }
                }
                else
                {
                    if (IntNumenator == 0)
                    {
                        return("0");
                    }
                    else
                    {
                        return($"<span class=\"fraction answerFraction\" ><span class=\"top\">{IntNumenator}</span>{(IntDenominator != 1 ? $"<span class=\"bottom\">{IntDenominator}</span>" : "")}</span>");
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// Рандомно перемножает множители числителя и знаменателя
        /// </summary>
        /// <param name="key">ключ генерации</param>
        internal void MultiplyPolynominal(int key, Settings settings)
        {
            Random            rnd            = new Random(key);
            List <Polynomial> newNumenator   = new List <Polynomial>();
            List <Polynomial> newDenomenator = new List <Polynomial>();
            int polynominalPower             = settings.MaxPowerPolynomial;

            while (Numenator.Count > 0)
            {
                /* Находим максимальное количество многочленов степени polynominalPower,
                 * которые возможно создать из оставшихся корней*/
                int maxCountOfPoly = Numenator.Count() / polynominalPower;
                //Определяемся с количеством создаваеммых многочленнов степени polynominalPower
                int countOfPoly = polynominalPower > 1 ? rnd.Next(Math.Max(0, maxCountOfPoly - 1), maxCountOfPoly + 1) : maxCountOfPoly;

                for (int i = 0; i < countOfPoly; i++)
                {
                    //Массив выбранных корней создаваемого многочлена
                    Polynomial newPoly = new Polynomial();
                    for (int j = 0; j < polynominalPower; j++)
                    {
                        int index = rnd.Next(Numenator.Count());
                        newPoly *= Numenator[index];
                        Numenator.RemoveAt(index);
                    }
                    //Создаем многочлен
                    newNumenator.Add(newPoly);
                }
                //Уменьшаем степень создаваемых многочленов
                polynominalPower--;
            }

            Numenator = newNumenator;

            polynominalPower = settings.MaxPowerPolynomial;

            while (Denominator.Count > 0)
            {
                /* Находим максимальное количество многочленов степени polynominalPower,
                 * которые возможно создать из оставшихся корней*/
                int maxCountOfPoly = Denominator.Count() / polynominalPower;
                //Определяемся с количеством создаваеммых многочленнов степени polynominalPower
                int countOfPoly = polynominalPower > 1 ? rnd.Next(Math.Max(0, maxCountOfPoly - 1), maxCountOfPoly + 1) : maxCountOfPoly;

                for (int i = 0; i < countOfPoly; i++)
                {
                    //Массив выбранных корней создаваемого многочлена
                    Polynomial newPoly = new Polynomial();
                    for (int j = 0; j < polynominalPower; j++)
                    {
                        int index = rnd.Next(Denominator.Count());
                        newPoly *= Denominator[index];
                        Denominator.RemoveAt(index);
                    }
                    //Создаем многочлен
                    newDenomenator.Add(newPoly);
                }
                //Уменьшаем степень создаваемых многочленов
                polynominalPower--;
            }

            Denominator = newDenomenator;
        }