Калькулятор обыкновенных дробей - C#

Формулировка задачи:

Пытаюсь селать калькулятор для обыкновенных дробей.Пока застрял на их сложении.Как видно на картинке имеется 6 текстбоксов первые четыре - начальные дроби последние 2-ая конечная дробь.Делаю все так-перемножаю знаменатели тем самым получаю общий знаменатель ну потом вывожу множители для обеих дробей ну и все перевожу в конечную дробь вроде все теперь эту дробь надо сократит, для этого есть НОД, но в этом то и проблема использовал все возможные алгоритмы НОД но они как то не так работают.Можете помочь с НОД?
 mnoj1 = tb2 * tb4/tb2;
                   mnoj2 = tb2 * tb4 / tb4;
                   znam = tb2*tb4;
                   chisl=mnoj1*tb1 + mnoj2*tb3;//так получаю числитель конечной дроби, теперь остается сократить.

Код к задаче: «Калькулятор обыкновенных дробей - C#»

textual
private void Calc()
        {
            int ch1 = Convert.ToInt32(textBox1.Text), ch2 = Convert.ToInt32(textBox3.Text), ch3;
            int zn1 = Convert.ToInt32(textBox2.Text), zn2 = Convert.ToInt32(textBox4.Text), zn3;
 
            zn3 = zn1 * zn2;
            ch3 = ch1 * zn2 + ch2 * zn1;
 
            int div = GCD(ch3, zn3);
 
            textBox5.Text=(ch3 / div).ToString();
            textBox6.Text=(zn3 / div).ToString();
        }
 
        int GCD(int a, int b)
        {
            if (a == 0) return b;
            if (b == 0) return a;
            if (a == b) return a;
            if (a == 1 || b == 1) return 1;
            if ((a % 2 == 0) && (b % 2 == 0)) return 2 * GCD(a / 2, b / 2);
            if ((a % 2 == 0) && (b % 2 != 0)) return GCD(a / 2, b);
            if ((a % 2 != 0) && (b % 2 == 0)) return GCD(a, b / 2);
            return GCD(b, (int)Math.Abs(a - b));
        }

8   голосов, оценка 4.625 из 5


СОХРАНИТЬ ССЫЛКУ