Fractional.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "Fraction.h"
  2. #include "../Rational.h"
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. Fraction::Fraction(long long int num, long long int denum)
  7. {
  8. int layer, spec;
  9. while(num > 1 or denum > 1)
  10. {
  11. if (num == 0 or denum == 0) break;
  12. layer = num / denum;
  13. spec = denum;
  14. denum = num - (layer*denum);
  15. num = spec;
  16. layers.add(layer);
  17. }
  18. }
  19. Fraction::Fraction(Rational r)
  20. {
  21. Fraction(r.num, r.denum);
  22. }
  23. Fraction::Fraction(double x)
  24. {
  25. Fraction(Rational(x));
  26. }
  27. Fraction::operator Rational()
  28. {
  29. long long num = 1;
  30. long long denum = layers.pop();
  31. int spec;
  32. cout << '(' << num << '/' << denum << ')' << endl;
  33. while(layers.lenght > 0)
  34. {
  35. spec = denum;
  36. denum = num + denum * layers.pop();
  37. num = spec;
  38. cout << '(' << num << '/' << denum << ')' << endl;
  39. }
  40. return Rational(denum, num);
  41. }
  42. Fraction::operator double()
  43. {
  44. return double(Rational(*this));
  45. }
  46. Fraction::operator int()
  47. {
  48. return int(double(*this));
  49. }
  50. ostream& operator <<(ostream& out, Fraction& f)
  51. {
  52. cout << "<< oper" << endl;
  53. out << f.layers;
  54. return out;
  55. }
  56. void Fraction::show()
  57. {
  58. cout << layers << endl;
  59. }