Реализовать класс для неправильных дробей - C#

Узнай цену своей работы

Формулировка задачи:

Реализовать класс для неправильных дробей. В этом классе реализовать интерфейс, содержащий методы для выполнения следующих операций: 1) сложение; 2) вычитание; 3) сокращение дроби.

Решение задачи: «Реализовать класс для неправильных дробей»

textual
Листинг программы
  1. using System;
  2.  
  3. namespace Space
  4. {
  5.     class Program
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             IrregularFraction a = new IrregularFraction(-8, 5);
  10.             IrregularFraction b = new IrregularFraction(7, 3);
  11.             Console.WriteLine(a.ToString());
  12.             Console.WriteLine(b.ToString());
  13.  
  14.             IrregularFraction d = a.Sub(b);
  15.             Console.WriteLine(d.ToString());
  16.             Console.WriteLine(d.Reduce());
  17.             Console.ReadLine();
  18.         }
  19.     }
  20.  
  21.     interface IIrregularFraction
  22.     {
  23.         IrregularFraction Sum(IrregularFraction a);
  24.         IrregularFraction Sub(IrregularFraction b);
  25.         int Reduce();
  26.     }
  27.  
  28.     class IrregularFraction : IIrregularFraction
  29.     {
  30.         public int Numerator { get; private set; }
  31.         public int Denominator { get; private set; }
  32.  
  33.         public IrregularFraction(int num, int denum)
  34.         {
  35.             if (num != 0 && denum != 0 && Math.Abs(num) >= Math.Abs(denum))
  36.             {
  37.                 Numerator = num * denum < 0 ? -Math.Abs(num) : num;
  38.                 Denominator = Math.Abs(denum);
  39.             }
  40.             else
  41.             {
  42.                 Console.WriteLine("Дробь не является неправильной. Взяты значения по умолчанию.");
  43.                 Numerator = 1;
  44.                 Denominator = 1;
  45.             }
  46.         }
  47.  
  48.         public IrregularFraction Sum(IrregularFraction a)
  49.         {
  50.             if (Denominator == a.Denominator)
  51.                 return new IrregularFraction(Numerator + a.Numerator, Denominator);
  52.             int newDenum = NOD(Denominator, a.Denominator);
  53.             int newNum = Numerator * newDenum / Denominator + a.Numerator * newDenum / a.Denominator;
  54.             return new IrregularFraction(newNum, newDenum);
  55.         }
  56.  
  57.         public IrregularFraction Sub(IrregularFraction a)
  58.         {
  59.             if (Denominator == a.Denominator)
  60.                 return new IrregularFraction(Numerator - a.Numerator, Denominator);
  61.             int newDenum = NOD(Denominator, a.Denominator);
  62.             int newNum = Numerator * newDenum / Denominator - a.Numerator * newDenum / a.Denominator;
  63.             return new IrregularFraction(newNum, newDenum);
  64.         }
  65.  
  66.         public int Reduce()
  67.         {
  68.             int iPart = Numerator / Denominator;
  69.             Numerator = Numerator % Denominator;
  70.             Console.WriteLine("{0}{1}{2}/{3}", iPart, Numerator >= 0 ? "+" : "", Numerator, Denominator);
  71.             return iPart;
  72.         }
  73.  
  74.         // В конкретно этой задаче НОД находится для знаменателей.
  75.         // Поэтому этот метод работает только для положительных чисел, т.к. знаменатель всегда положительный.
  76.         // В цикле не учитываются значения заменателя, равные нулю, ибо такие знаменатели отсеиваются при создании новой дроби.
  77.         int NOD(int a, int b)
  78.         {
  79.             if (a == 1 || b == 1)
  80.                 return 1;
  81.             for (int i = 2; i < a * b; i++)
  82.                 if (i % a == 0 && i % b == 0)
  83.                     return i;
  84.             return a * b;
  85.         }
  86.  
  87.         public override string ToString()
  88.         {
  89.             return String.Format("{0}/{1}", Numerator, Denominator);
  90.         }
  91.     }
  92. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы