Advertisement
vencinachev

FractionClass

Sep 4th, 2019
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.55 KB | None | 0 0
  1. class Fraction : IComparable
  2.     {
  3.         private long nominator;
  4.         private long denominator;
  5.  
  6.         public long Nominator
  7.         {
  8.             get
  9.             {
  10.                 return this.nominator;
  11.             }
  12.             set
  13.             {
  14.                 this.nominator = value;
  15.             }
  16.         }
  17.  
  18.         public long Denominator
  19.         {
  20.             get
  21.             {
  22.                 return this.denominator;
  23.             }
  24.             set
  25.             {
  26.                 if (value == 0)
  27.                 {
  28.                     throw new ArgumentException("Zero cannot be denominator!");
  29.                 }
  30.                 this.denominator = value;
  31.             }
  32.         }
  33.  
  34.         public Fraction(long nominator, long denominator)
  35.         {
  36.             this.Nominator = nominator;
  37.             this.Denominator = denominator;
  38.            
  39.         }
  40.  
  41.         public Fraction() : this(1, 1)
  42.         {
  43.         }
  44.  
  45.         public Fraction(long numerator) : this(numerator, 1)
  46.         {
  47.         }
  48.         public override string ToString()
  49.         {
  50.             if (this.Denominator == 1)
  51.             {
  52.                 return this.Nominator.ToString();
  53.             }
  54.             else if (this.Nominator == 0)
  55.             {
  56.                 return "0";
  57.             }
  58.             else if (this.Nominator * this.Denominator > 0)
  59.             {
  60.                 return string.Format("{0}/{1}", Math.Abs(this.Nominator), Math.Abs(this.Denominator));
  61.             }
  62.             return string.Format("-{0}/{1}", Math.Abs(this.Nominator), Math.Abs(this.Denominator));
  63.         }
  64.  
  65.         private long gcd(long a, long b)
  66.         {
  67.             if (b == 0)
  68.             {
  69.                 return a;
  70.             }
  71.             return gcd(b, a % b);
  72.         }
  73.  
  74.         public void Reduce()
  75.         {
  76.             long divider = gcd(this.Nominator, this.Denominator);
  77.             this.denominator /= divider;
  78.             this.nominator /= divider;
  79.         }
  80.  
  81.         public int CompareTo(object obj)
  82.         {
  83.             Fraction other = (Fraction)obj;
  84.             double comp = (double)this.Nominator / this.Denominator - (double)other.Nominator / other.Denominator;
  85.  
  86.             if (Math.Abs(comp) < 0.00001)
  87.             {
  88.                 return 0;
  89.             }
  90.             else if (comp > 0)
  91.             {
  92.                 return 1;
  93.             }
  94.             else
  95.             {
  96.                 return -1;
  97.             }
  98.         }
  99.  
  100.         public static Fraction operator+(Fraction fr1, Fraction fr2)
  101.         {
  102.             Fraction fr = new Fraction();
  103.             fr.Nominator = fr1.Nominator*fr2.Denominator + fr2.Nominator*fr1.Denominator;
  104.             fr.Denominator = fr1.Denominator * fr2.Denominator;
  105.             fr.Reduce();
  106.             return fr;
  107.         }
  108.  
  109.         public static bool operator<(Fraction fr1, Fraction fr2)
  110.         {
  111.             return fr1.CompareTo(fr2) == -1;
  112.         }
  113.         public static bool operator>(Fraction fr1, Fraction fr2)
  114.         {
  115.             return fr1.CompareTo(fr2) == 1; ;
  116.         }
  117.  
  118.         public static bool operator <=(Fraction fr1, Fraction fr2)
  119.         {
  120.             return fr1.CompareTo(fr2) != 1; ;
  121.         }
  122.         public static bool operator >=(Fraction fr1, Fraction fr2)
  123.         {
  124.             return fr1.CompareTo(fr2) != -1; ;
  125.         }
  126.  
  127.         public static bool operator ==(Fraction fr1, Fraction fr2)
  128.         {
  129.             return fr1.CompareTo(fr2) == 0; ;
  130.         }
  131.         public static bool operator !=(Fraction fr1, Fraction fr2)
  132.         {
  133.             return fr1.CompareTo(fr2) != 0; ;
  134.         }
  135.         public static Fraction operator-(Fraction fr1, Fraction fr2)
  136.         {
  137.             Fraction fr = new Fraction();
  138.             fr.Nominator = fr1.Nominator * fr2.Denominator - fr2.Nominator * fr1.Denominator;
  139.             fr.Denominator = fr1.Denominator * fr2.Denominator;
  140.             fr.Reduce();
  141.             return fr;
  142.         }
  143.  
  144.         public static Fraction operator*(Fraction fr1, Fraction fr2)
  145.         {
  146.             Fraction fr = new Fraction();
  147.             fr.Nominator = fr1.Nominator * fr2.Nominator;
  148.             fr.Denominator = fr1.Denominator * fr2.Denominator;
  149.             fr.Reduce();
  150.             return fr;
  151.         }
  152.  
  153.         public static Fraction operator /(Fraction fr1, Fraction fr2)
  154.         {
  155.             Fraction fr = new Fraction();
  156.             fr.Nominator = fr1.Nominator * fr2.Denominator;
  157.             fr.Denominator = fr1.Denominator * fr2.Nominator;
  158.             fr.Reduce();
  159.             return fr;
  160.         }
  161.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement