Создать класс для хранения обычных дробей - C#
Формулировка задачи:
Здравствуйте, не могу решить задачу.
Условие:
Создать класс для хранения обычных дробей. Запрограммировать метод сокращения дроби. Предусмотреть исключительные ситуации.
Решение задачи: «Создать класс для хранения обычных дробей»
textual
Листинг программы
class Fract
{
public int Num { get; set; }
public int Denom { get; set; }
public Fract(int numerator, int denominator)
{
Num = numerator;
Denom = denominator;
}
public Fract(string fraction)
{
int slash = fraction.IndexOf('/');
Num = int.Parse(fraction.Substring(0, slash));
Denom = int.Parse(fraction.Substring(slash + 1, fraction.Length - slash - 1));
}
public static Fract Reduce(Fract fraction)
{
int nod = Nod(fraction.Num, fraction.Denom);
if (nod != 0)
{
fraction.Num /= nod;
fraction.Denom /= nod;
}
return fraction;
}
public static int Nod(int n, int d)
{
int temp;
n = Math.Abs(n);
d = Math.Abs(d);
while (d != 0 && n != 0)
{
if (n % d > 0)
{
temp = n;
n = d;
d = temp % d;
}
else break;
}
if (d != 0 && n != 0) return d;
else return 0;
}
public static Fract operator -(Fract a)
{
a.Num *= -1;
return a;
}
public static Fract operator +(Fract f1, Fract f2)
{
return Reduce(new Fract(f1.Num * f2.Denom + f2.Num * f1.Denom, f1.Denom * f2.Denom));
}
public static Fract operator -(Fract f1, Fract f2)
{
return Reduce(new Fract(f1.Num * f2.Denom - f2.Num * f1.Denom, f1.Denom * f2.Denom));
}
public static Fract operator *(Fract f1, Fract f2)
{
return Reduce(new Fract(f1.Num * f2.Num, f1.Denom * f2.Denom));
}
public static Fract operator /(Fract f1, Fract f2)
{
return Reduce(new Fract(f1.Num * f2.Denom, f1.Denom * f2.Num));
}
public override string ToString()
{
return Num.ToString() + "/" + Denom.ToString();
}
}