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