/// <summary> /// Функция находит значение старшего коэф-та многочлена /// </summary> /// <param name="polynom">Объект класса многочлен</param> /// <returns>Старший коэффициент многочлена</returns> public static Rational Run(Polynomial polynom) { int leadDeg = polynom.Values.Length - 1; //Текущее значение старшей степени while ((N_2.Run(polynom.Values[leadDeg].Numerator)) && (leadDeg > 0)) //Допустим, что в ходе других действий старший к-т и другие могли обнулиться, { leadDeg--; //но остались в массиве. Цикл отсеивает такие эл-ты, ибо они уже не являются } return(polynom.Values[leadDeg]); //старшим к-том. Иначе совсем скучно }
/// <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="num1">Первое натуральное число</param> /// <param name="num2">Второе натуральное число</param> /// <returns>Будет возвращен наибольший общий делитель</returns> public static Natural Run(Natural num1, Natural num2) { num1.Clear(); num2.Clear(); Natural A1 = num1; Natural A2 = num2; Natural NodSup = new Natural("0"); if (N_1.Run(num1, num2) == 2) // Если второе число больше, меняем их местами { Natural Asupport = num1; A1 = A2; A2 = Asupport; } while (N_2.Run(A2) == false) // Пока второе число не будет равно 0 { NodSup = N_12.Run(A1, A2); A1 = A2; A2 = NodSup; } return(A1.Clear()); // Возвращение НОД }