Первый class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//3. * Описать класс дробей - рациональных чисел, являющихся отношением двух целых чисел.
//     Предусмотреть методы сложения, вычитания, умножения и деления дробей. Написать
//     программу, демонстрирующую все разработанные элементы класса.
//  ** Добавить упрощение дробей.

namespace Task_3
{
    class Program
    {
        static void Main(string[] args)
        {
            Fraction x = new Fraction(1, 2);
            Fraction y = new Fraction(2, 3);
            Fraction z = new Fraction(311, 5222);

            Console.WriteLine(x.ToString() + " + " + y.ToString() + " = " + x.Plus(y).ToString());
            Console.WriteLine(x.ToString() + " - " + y.ToString() + " = " + x.Minus(y).ToString());
            Console.WriteLine(x.ToString() + " * " + y.ToString() + " = " + x.Multi(y).ToString());
            Console.WriteLine(x.ToString() + " / " + y.ToString() + " = " + x.Division(y).ToString());
            Console.WriteLine(x.ToString() + " + " + z.ToString() + " = " + x.Plus(z).ToString());
            Console.WriteLine(x.ToString() + " - " + z.ToString() + " = " + x.Minus(z).ToString());
            Console.WriteLine(x.ToString() + " * " + z.ToString() + " = " + x.Multi(z).ToString());
            Console.WriteLine(x.ToString() + " / " + z.ToString() + " = " + x.Division(z).ToString());

            Console.ReadKey();
        }
    }

    public class Fraction
    {
        int numerator, denominator;

        /// <summary>
        /// Конструктор без параметров
        /// </summary>
        public Fraction()
        {
            numerator = 0;
            denominator = 0;
        }
        
        /// <summary>
        /// Конструктор класса с числителем и знаменателем
        /// </summary>
        public Fraction(int num, int denom)
        {
            numerator = num;
            denominator = denom;
        }

        /// <summary>
        /// Сложение дробей
        /// </summary>
        /// <param name="x2">второе слагаемое</param>
        /// <returns>ответ</returns>
        public Fraction Plus(Fraction x2)
        {
            Fraction x3 = new Fraction();
            x3.numerator = numerator * x2.denominator + x2.numerator * denominator;
            x3.denominator = denominator * x2.denominator;
            Reduce(ref x3.numerator, ref x3.denominator);
            return x3;
        }

        /// <summary>
        /// Вычитание дробей
        /// </summary>
        /// <param name="x2">вычитаемое</param>
        /// <returns>ответ</returns>
        public Fraction Minus(Fraction x2)
        {
            Fraction x3 = new Fraction();
            x3.numerator = numerator * x2.denominator - x2.numerator * denominator;
            x3.denominator = denominator * x2.denominator;
            Reduce(ref x3.numerator, ref x3.denominator);
            return x3;
        }

        /// <summary>
        /// Умножение дробей
        /// </summary>
        /// <param name="x2">второй множитель</param>
        /// <returns>ответ</returns>
        public Fraction Multi(Fraction x2)
        {
            Fraction x3 = new Fraction();
            x3.numerator = numerator * x2.numerator;
            x3.denominator = denominator * x2.denominator;
            Reduce(ref x3.numerator, ref x3.denominator);
            return x3;
        }

        /// <summary>
        /// Деление дробей
        /// </summary>
        /// <param name="x2">делитель</param>
        /// <returns>ответ</returns>
        public Fraction Division(Fraction x2)
        {
            Fraction x3 = new Fraction();
            x3.numerator = numerator * x2.denominator;
            x3.denominator = denominator * x2.numerator;
            Reduce(ref x3.numerator, ref x3.denominator);
            return x3;
        }

        /// <summary>
        /// Метод сокращения дробей
        /// </summary>
        /// <param name="a">числитель</param>
        /// <param name="b">знаменатель</param>
        public void Reduce(ref int a, ref int b)
        {
            for (int i = 2; i < Math.Max(a, b); i++)
            {
                if (a % i == 0 && b % i == 0)
                {
                    a /= i;
                    b /= i;
                    i = 1; // начинаем цикл с начала
                }
            }
        }

        public string ToString()
        {
            return numerator + "/" + denominator;
        }
    }
}