/// <summary> /// Умножение дробей /// </summary> /// <param name = "A"> Дробь 1 </param> /// <param name = "B"> Дробь 2 </param> /// <returns> Перемноженные дроби </returns> public static Rational Run(Rational A, Rational B) { Rational ret = new Rational(new Digit(new int[] { }), new Digit(new int[] { })); ret.Numerator = Z_8.Run(A.Numerator, B.Numerator); ret.Denominator = N_8.Run(A.Denominator, B.Denominator); return(Q_1.Run(ret.Clear())); }
/// <summary> /// Если знаменатель равен 1, выводит числитель /// </summary> /// <param name="num">Числитель</param> /// <param name="denom">Знаменатель</param> /// <returns>Numerator и Denomenator</returns> public static Digit Run(Rational A) { A = Q_1.Run(A); if (A.Denominator.Length == 1 && A.Denominator[0] == 1) { return(A.Numerator); } throw new Exception(); }
/// <summary> /// Деление дробей /// </summary> /// <param name="A">Первая дробь </param> /// <param name="B">Вторая дробь </param> /// <returns>Поделенные дроби </returns> public static Rational Run(Rational A, Rational B) { Rational output = new Rational(new Digit(new int[] { }), new Digit(new int[] { })); // создаем локальную переменную output.Numerator.Value = N_8.Run(A.Numerator.Value, B.Denominator); // определяем числитель новой дроби output.Denominator = N_8.Run(A.Denominator, B.Numerator.Value); // определяем знаментатель output.Sign = A.Sign == B.Sign; return(Q_1.Run(output)); }
/// <summary> /// Сложение дробей /// </summary> /// <param name="R1"> Дробь </param> /// <param name="R2"> Дробь </param> /// <returns>Будет возвращенa сумма R1 и R2 </returns> public static Rational Run(Rational R1, Rational R2) { Digit NOK = new Digit(N_14.Run(R1.Denominator, R2.Denominator)); //Находим наибольшее общее кратное знаменателей //Находим, на что надо домножить числитель, чтобы привести к единому знаменателю и, собственно, домножаем R1.Numerator = Z_8.Run(R1.Numerator, Z_9.Run(NOK, R1.Denominator)); R2.Numerator = Z_8.Run(R2.Numerator, Z_9.Run(NOK, R2.Denominator)); //Складываем 2 дроби. Новый числитель - сумма 2-х предыдущих, новый знаменатель - НОК Rational R = new Rational(Z_6.Run(R1.Numerator, R2.Numerator), NOK); return(Q_1.Run(R)); //сокращенная дробь на выходе }
/// <summary> /// Костыль, приводящий дробь к адекватному виду /// </summary> /// <param name="A">Дробь</param> /*public static void Kostil(ref Rational A) * { * if (A.Denominator.Sign==false) * { * A.Numerator.Sign = !A.Numerator.Sign; * A.Denominator.Sign = true; * } * } */ /// <summary> /// Вычитание дробей /// </summary> /// <param name="A">Уменьшаемое</param> /// <param name="B">Вычитаемое</param> /// <returns>Результирующая дробь</returns> public static Rational Run(Rational A, Rational B) { //инкостыляция /*Kostil(ref A); * Kostil(ref B);*/ //Перевод НОК из натурального в целое Digit NOK = new Digit(true, N_14.Run(A.Denominator, B.Denominator)); //Под общий знаменатель Rational Num1 = new Rational("1", "1"); Rational Num2 = new Rational("1", "1"); Num1.Numerator = Z_8.Run(A.Numerator, Z_9.Run(NOK, A.Denominator)); Num2.Numerator = Z_8.Run(B.Numerator, Z_9.Run(NOK, B.Denominator)); //Формируем результат: числитель как разность числителей, а знаменатель как НОК знаменателей Rational Result = new Rational(Z_7.Run(Num1.Numerator, Num2.Numerator), NOK); //Результат - сокращенная дробь return(Q_1.Run(Result)); }
/// <summary> /// Проверка на целое, если рациональное число является целым, то «да», иначе «нет» /// </summary> /// <param name="Rational input">вводится рациональное число</param> /// <returns>"true" или "false"</returns> public static bool Run(Rational input) { Q_1.Run(input); // сокращаем дробь return(input.Denominator.Clear().Length == 1 && input.Denominator[0] == 1); }