Beispiel #1
0
        /// <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);
            }
            }
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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()));
        }
Beispiel #4
0
        /// <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));
        }
Beispiel #5
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);
        }
Beispiel #6
0
 /// <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)));
 }