Advertisement
Ne-Biolog

Untitled

May 28th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3.  
  4. namespace lab7
  5. {
  6. class MainClass
  7. {
  8. interface IE
  9. {
  10. bool Equals(object x);
  11. }
  12.  
  13. class Fraction : IE
  14. {
  15. public long numerator;
  16. public long denominator;
  17.  
  18. public Fraction(long numerator, long denominator)
  19. {
  20. long sign = 0;
  21. if (numerator < 0)
  22. sign++;
  23. if (denominator < 0)
  24. sign++;
  25. if(denominator == 0)
  26. throw new InvalidOperationException("Denominator cannot be assigned a 0 Value.");
  27. numerator = Math.Abs(numerator);
  28. denominator = Math.Abs(denominator);
  29. if (sign == 1)
  30. numerator *= -1;
  31. long GCD = gcd(numerator, denominator);
  32. numerator /= GCD;
  33. denominator /= GCD;
  34. this.numerator = numerator;
  35. this.denominator = denominator;
  36. }
  37.  
  38. public static Fraction operator + (Fraction x, Fraction y)
  39. {
  40. long newDenominator = (x.denominator * y.denominator) / gcd(x.denominator, y.denominator);
  41. long newNumerator = x.numerator * newDenominator / x.denominator + y.numerator * newDenominator / y.denominator;
  42. return new Fraction(newNumerator, newDenominator);
  43. }
  44.  
  45. public static Fraction operator - (Fraction x, Fraction y)
  46. {
  47. long newDenominator = (x.denominator * y.denominator) / gcd(x.denominator, y.denominator);
  48. long newNumerator = x.numerator * newDenominator / x.denominator - y.numerator * newDenominator / y.denominator;
  49. return new Fraction(newNumerator, newDenominator);
  50. }
  51.  
  52. public static Fraction operator * (Fraction x, Fraction y)
  53. {
  54. long newNumerator = x.numerator * y.numerator;
  55. long newDenominator = x.denominator * y.denominator;
  56. return new Fraction(newNumerator, newDenominator);
  57. }
  58.  
  59. public static Fraction operator / (Fraction x, Fraction y)
  60. {
  61. long newNumerator = x.numerator * y.denominator;
  62. long newDenominator = x.denominator * y.numerator;
  63. return new Fraction(newNumerator, newDenominator);
  64. }
  65.  
  66. public static long gcd(long x, long y)
  67. {
  68. x = Math.Abs(x);
  69. y = Math.Abs(y);
  70. while(x > 0 && y > 0)
  71. {
  72. if (x > y)
  73. x %= y;
  74. else
  75. y %= x;
  76. }
  77. return x + y;
  78. }
  79.  
  80. public bool Equals(Fraction other)
  81. {
  82. return (other.numerator == this.numerator && other.denominator == this.denominator);
  83. }
  84.  
  85. public static Fraction DoubleToFraction(string str)
  86. {
  87. /*bool ok = false;
  88. for (int j = 0; j < str.Length; ++j)
  89. {
  90. if(str[j] == '.') continue;
  91. if (str[j] != '0') ok = true;
  92. }
  93. if(ok == false)
  94. {
  95. return new Fraction(0, 1);
  96. }
  97. */
  98. long i = str.IndexOf('.');
  99. long d = str.Length - i;
  100.  
  101. double f = Convert.ToDouble(str);
  102. long newNumerator = (long)(f * Math.Pow(10, d));
  103. long newDenominator = (long)Math.Pow(10, d);
  104.  
  105. //Console.WriteLine(newNumerator);
  106. //Console.WriteLine(newDenominator);
  107.  
  108. return new Fraction(newNumerator, newDenominator);
  109. }
  110.  
  111. public static Fraction parse(string str)
  112. {
  113. int i = str.IndexOf('/');
  114. if(i == -1)
  115. {
  116. return DoubleToFraction(str);
  117. }
  118. long newNumerator = Convert.ToInt64(str.Substring(0, i));
  119. long newDenominator = Convert.ToInt64(str.Substring(i + 1));
  120. return new Fraction(newNumerator, newDenominator);
  121. }
  122.  
  123.  
  124. public static implicit operator double(Fraction r)
  125. {
  126. return (double)r.numerator / r.denominator;
  127. }
  128.  
  129. public static implicit operator Fraction(double r)
  130. {
  131. string str = Convert.ToString(r);
  132. return Fraction.parse(str);
  133. }
  134.  
  135. public string toString()
  136. {
  137. double res = (double)this.numerator / this.denominator;
  138. return Convert.ToString(res);
  139. }
  140.  
  141. public string getStrFraction()
  142. {
  143. string ans = this.numerator.ToString() + '/' + this.denominator.ToString();
  144. return ans;
  145. }
  146. }
  147.  
  148. public static void Main(string[] args)
  149. {
  150. Fraction x = Fraction.parse(Console.ReadLine());
  151. Fraction y = Fraction.parse(Console.ReadLine());
  152.  
  153. //Console.WriteLine(x.Equals(y));
  154.  
  155. //double t = 0.15;
  156. //Fraction r = t;
  157. //Console.WriteLine(r.toString());
  158. //Console.WriteLine(r.getStrFraction());
  159.  
  160. x += y;
  161. Console.WriteLine(x.toString());
  162. Console.WriteLine(x.getStrFraction());
  163. }
  164. }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement