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;
}
}
}