Реализовать класс для неправильных дробей - C#
Формулировка задачи:
Реализовать класс для неправильных дробей. В этом классе реализовать интерфейс, содержащий методы для выполнения следующих операций:
1) сложение;
2) вычитание;
3) сокращение дроби.
Решение задачи: «Реализовать класс для неправильных дробей»
textual
Листинг программы
using System; namespace Space { class Program { static void Main(string[] args) { IrregularFraction a = new IrregularFraction(-8, 5); IrregularFraction b = new IrregularFraction(7, 3); Console.WriteLine(a.ToString()); Console.WriteLine(b.ToString()); IrregularFraction d = a.Sub(b); Console.WriteLine(d.ToString()); Console.WriteLine(d.Reduce()); Console.ReadLine(); } } interface IIrregularFraction { IrregularFraction Sum(IrregularFraction a); IrregularFraction Sub(IrregularFraction b); int Reduce(); } class IrregularFraction : IIrregularFraction { public int Numerator { get; private set; } public int Denominator { get; private set; } public IrregularFraction(int num, int denum) { if (num != 0 && denum != 0 && Math.Abs(num) >= Math.Abs(denum)) { Numerator = num * denum < 0 ? -Math.Abs(num) : num; Denominator = Math.Abs(denum); } else { Console.WriteLine("Дробь не является неправильной. Взяты значения по умолчанию."); Numerator = 1; Denominator = 1; } } public IrregularFraction Sum(IrregularFraction a) { if (Denominator == a.Denominator) return new IrregularFraction(Numerator + a.Numerator, Denominator); int newDenum = NOD(Denominator, a.Denominator); int newNum = Numerator * newDenum / Denominator + a.Numerator * newDenum / a.Denominator; return new IrregularFraction(newNum, newDenum); } public IrregularFraction Sub(IrregularFraction a) { if (Denominator == a.Denominator) return new IrregularFraction(Numerator - a.Numerator, Denominator); int newDenum = NOD(Denominator, a.Denominator); int newNum = Numerator * newDenum / Denominator - a.Numerator * newDenum / a.Denominator; return new IrregularFraction(newNum, newDenum); } public int Reduce() { int iPart = Numerator / Denominator; Numerator = Numerator % Denominator; Console.WriteLine("{0}{1}{2}/{3}", iPart, Numerator >= 0 ? "+" : "", Numerator, Denominator); return iPart; } // В конкретно этой задаче НОД находится для знаменателей. // Поэтому этот метод работает только для положительных чисел, т.к. знаменатель всегда положительный. // В цикле не учитываются значения заменателя, равные нулю, ибо такие знаменатели отсеиваются при создании новой дроби. int NOD(int a, int b) { if (a == 1 || b == 1) return 1; for (int i = 2; i < a * b; i++) if (i % a == 0 && i % b == 0) return i; return a * b; } public override string ToString() { return String.Format("{0}/{1}", Numerator, Denominator); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д