/// <summary> /// Нахождение остатка от деления целого на натуральное /// </summary> /// <param name="A">Делимое(целое число)</param> /// <param name="B">Делитель(меньшее натуральное число)</param> /// <returns>Целое число - остаток от деления</returns> public static Digit Run(Digit A, Natural B) { Digit Result = Z_9.Run(A, B); //Частное от деления большего целого на меньшее или равное натуральное с остатком Digit B_1 = new Digit(B); //преобразуем делитель из типа Natural в тип Digit Result = Z_8.Run(Result, B_1); // Умножаем частное от деления на делитель Result = Z_7.Run(A, Result); // Находим остаток от деления Result.Sign = true; return(Result); // Возвращаем остаток от деления }
/// <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)); }