예제 #1
0
        /// <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]);                                      //старшим к-том. Иначе совсем скучно
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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());  // Возвращение НОД
        }