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