/// <summary> /// Вычитание из одного натурального другого, умноженного на цифру /// </summary> /// <param name="Num1">Уменьшаемое</param> /// <param name="Num2">Вычитаемое</param> /// <param name="Multiplier">Множитель второго числа</param> /// <returns>Разность</returns> public static Natural Run(Natural Num1, Natural Num2, Natural Multiplier) { Natural Difference = new Natural("0"); Natural Num2Multiplied = N_8.Run(Num2, Multiplier); // Умножаем второй множитель на цифру switch (N_1.Run(Num1, Num2Multiplied)) // Если второе больше, меняем числа местами { case 0: // Если числа равны, то разность = 0 { return(Difference); } case 1: // Если первое больше, вычитаем из него второе { Difference = N_5.Run(Num1, Num2Multiplied); return(Difference); } default: // Если второе больше, меняем числа местами и вычитаем { Natural NumSupport = Num1; Num1 = Num2Multiplied; Num2 = NumSupport; Difference = N_5.Run(Num1, Num2); return(Difference); } } }
/// <summary> /// НОК натуральных чисел /// </summary> /// <param name="A">Первое натуральное число</param> /// <param name="B">Второе натуральное число</param> /// <returns>Будет возвращено Наименьшее общее кратное </returns> public static Natural Run(Natural A, Natural B) { A.Clear(); B.Clear(); // Переменные очищаются от лишних нулей Natural output = N_11.Run(N_8.Run(A, B), N_13.Run(A, B)); // НОК = (a*b)/НОД(a,b) - это формула return(output); }
/// <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> /// Деление дробей /// </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="num1">Первое число, которое поступает на обработку</param> /// <param name="num2">Второе число, которое поступает на обработку</param> /// <returns>Будет возвращено частное</returns> public static Natural Run(Natural num1, Natural num2) { num1.Clear(); num2.Clear(); if (N_1.Run(num1, num2) == 2 || N_2.Run(num2)) { throw new Exception(); // если второе число больше, то ошибка } Natural Result = N_10.Run(num1, num2); // вычисление первой цифры деления Natural Prom = N_9.Run(num1, num2, Result); // вычитание из первого числа второго, умноженного на первую цифру деления Natural PromResult = new Natural(new int[1]); while (N_1.Run(num2, Prom) == 2) { PromResult = N_10.Run(Prom, num2); Prom = N_9.Run(Prom, num2, PromResult); Result = N_4.Run(Result, PromResult); } num1 = N_4.Run(N_8.Run(num2, Result), Prom); return(Result); }
/// <summary> /// Умножение целых чисел /// </summary> /// <param name="A">Первый множитель</param> /// <param name="B">Второй мнжитель</param> /// <returns>Перемноженные числа</returns> public static Digit Run(Digit A, Digit B) { return(new Digit(A.Sign == B.Sign, N_8.Run(A.Value, B.Value))); }