Ejemplo n.º 1
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()));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Если знаменатель равен 1, выводит числитель
 /// </summary>
 /// <param name="num">Числитель</param>
 /// <param name="denom">Знаменатель</param>
 /// <returns>Numerator и Denomenator</returns>
 public static Digit Run(Rational A)
 {
     A = Q_1.Run(A);
     if (A.Denominator.Length == 1 && A.Denominator[0] == 1)
     {
         return(A.Numerator);
     }
     throw new Exception();
 }
Ejemplo n.º 3
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));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Сложение дробей
        /// </summary>
        /// <param name="R1"> Дробь </param>
        /// <param name="R2"> Дробь </param>
        /// <returns>Будет возвращенa сумма R1 и R2 </returns>
        public static Rational Run(Rational R1, Rational R2)
        {
            Digit NOK = new Digit(N_14.Run(R1.Denominator, R2.Denominator)); //Находим наибольшее общее кратное знаменателей

            //Находим, на что надо домножить числитель, чтобы привести к единому знаменателю и, собственно, домножаем
            R1.Numerator = Z_8.Run(R1.Numerator, Z_9.Run(NOK, R1.Denominator));
            R2.Numerator = Z_8.Run(R2.Numerator, Z_9.Run(NOK, R2.Denominator));

            //Складываем 2 дроби. Новый числитель - сумма 2-х предыдущих, новый знаменатель - НОК
            Rational R = new Rational(Z_6.Run(R1.Numerator, R2.Numerator), NOK);

            return(Q_1.Run(R)); //сокращенная дробь на выходе
        }
Ejemplo n.º 5
0
        /// <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));
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Проверка на целое, если рациональное число является целым, то «да», иначе «нет»
 /// </summary>
 /// <param name="Rational input">вводится рациональное число</param>
 /// <returns>"true" или "false"</returns>
 public static bool Run(Rational input)
 {
     Q_1.Run(input); // сокращаем дробь
     return(input.Denominator.Clear().Length == 1 && input.Denominator[0] == 1);
 }