Fractional.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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) {
  12. cout << num + denum << endl;
  13. layers.add(num + denum);
  14. break;
  15. }
  16. layer = num / denum;
  17. spec = denum;
  18. denum = num - (layer*denum);
  19. num = spec;
  20. cout << layer;
  21. layers.add(layer);
  22. cout << " added\n";
  23. cout << num << ' ' << denum << endl;
  24. }
  25. cout << "init success" << endl;
  26. }
  27. Fraction::Fraction(Rational r)
  28. {
  29. Fraction(r.num, r.denum);
  30. }
  31. Fraction::Fraction(double d)
  32. {
  33. }
  34. Fraction::operator Rational()
  35. {
  36. long long num = 1;
  37. long long denum = layers.pop();
  38. int spec;
  39. cout << '(' << num << '/' << denum << ')' << endl;
  40. while(layers.lenght > 0)
  41. {
  42. spec = denum;
  43. denum = num + denum * layers.pop();
  44. num = spec;
  45. cout << '(' << num << '/' << denum << ')' << endl;
  46. }
  47. return Rational(denum, num);
  48. }
  49. Fraction::operator double()
  50. {
  51. return double(Rational(*this));
  52. }
  53. Fraction::operator int()
  54. {
  55. return int(double(*this));
  56. }
  57. ostream& operator <<(ostream& out, Fraction& f)
  58. {
  59. cout << "<< oper" << endl;
  60. out << f.layers;
  61. return out;
  62. }
  63. void Fraction::show()
  64. {
  65. cout << layers << endl;
  66. }