Создать класс для хранения обычных дробей - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д