/// <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); }
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>"); } } } }
/// <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; }