GoralWMoro

Untitled

Jan 21st, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. //Euklides
  4. int NWD(int a, int b)
  5. {
  6. while(a!=b)
  7. if(a>b)
  8. a-=b; //lub a = a - b;
  9. else
  10. b-=a; //lub b = b-a
  11. return a; // lub b - obie zmienne przechowują wynik NWD(a,b)
  12. }
  13.  
  14. using namespace std;
  15. class Fraction {
  16. private:
  17. int _a;
  18. int _b;
  19. public:
  20. Fraction(int a, int b){
  21. int dzielnik = NWD(abs(a), abs(b));
  22.  
  23. this->_a = a/dzielnik;
  24. this->_b = b/dzielnik;
  25. }
  26.  
  27. int getNumerator(){
  28. return this->_a;
  29. }
  30.  
  31. int getDenominator(){
  32. return this->_b;
  33. }
  34.  
  35. double getValue(){
  36. double wartosc = (double)_a/(double)_b;
  37. }
  38.  
  39.  
  40. Fraction & operator+ (Fraction &fraction){
  41. //rozszerzenie ułamka pierwszego
  42. int nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
  43. int nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
  44. //rozszerzenie ułamka drugiego
  45. int nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
  46. int nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
  47.  
  48. //nowy ulamek
  49. int nowy_licznik = nowy_licznik_pierwszego + nowy_licznik_drugiego;
  50. int nowy_mianownik = nowy_mianownik_pierwszego;
  51.  
  52. //skracanie ułamka
  53. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  54.  
  55. nowy_licznik = nowy_licznik/dzielnik;
  56. nowy_mianownik = nowy_mianownik/dzielnik;
  57. Fraction *nowy_fraction = new Fraction(nowy_licznik, nowy_mianownik);
  58. return *nowy_fraction;
  59. }
  60.  
  61. Fraction &operator-(Fraction &fraction){
  62. //rozszerzenie ułamka pierwszego
  63. int nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
  64. int nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
  65. //rozszerzenie ułamka drugiego
  66. int nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
  67. int nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
  68.  
  69. //nowy ulamek
  70. int nowy_licznik = nowy_licznik_pierwszego - nowy_licznik_drugiego;
  71. int nowy_mianownik = nowy_mianownik_pierwszego;
  72.  
  73. //skracanie ułamka
  74. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  75.  
  76. nowy_licznik = nowy_licznik/dzielnik;
  77. nowy_mianownik = nowy_mianownik/dzielnik;
  78.  
  79. return *new Fraction(nowy_licznik, nowy_mianownik);
  80. }
  81.  
  82. Fraction &operator*(Fraction &fraction){
  83. int nowy_licznik = this->getNumerator() * fraction.getNumerator();
  84. int nowy_mianownik = this->getDenominator() * fraction.getDenominator();
  85.  
  86. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  87.  
  88. nowy_licznik = nowy_licznik/dzielnik;
  89. nowy_mianownik = nowy_mianownik/dzielnik;
  90.  
  91. return *new Fraction(nowy_licznik, nowy_mianownik);
  92. }
  93.  
  94. Fraction &operator/(Fraction &fraction){
  95. int nowy_licznik = this->getNumerator() * fraction.getDenominator();
  96. int nowy_mianownik = this->getDenominator() * fraction.getNumerator();
  97.  
  98. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  99.  
  100. nowy_licznik = nowy_licznik/dzielnik;
  101. nowy_mianownik = nowy_mianownik/dzielnik;
  102.  
  103. return *new Fraction(nowy_licznik, nowy_mianownik);
  104. }
  105.  
  106. Fraction& operator+=(Fraction &fraction){
  107. //rozszerzenie ułamka pierwszego
  108. double nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
  109. double nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
  110. //rozszerzenie ułamka drugiego
  111. double nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
  112. double nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
  113.  
  114. //nowy ulamek
  115. int nowy_licznik = nowy_licznik_pierwszego + nowy_licznik_drugiego;
  116. int nowy_mianownik = nowy_mianownik_pierwszego;
  117.  
  118. //skracanie ułamka
  119. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  120.  
  121. nowy_licznik = nowy_licznik/dzielnik;
  122. nowy_mianownik = nowy_mianownik/dzielnik;
  123.  
  124. _a = nowy_licznik;
  125. _b = nowy_mianownik;
  126.  
  127. return *this;
  128. }
  129.  
  130. Fraction& operator-=(Fraction &fraction){
  131. //rozszerzenie ułamka pierwszego
  132. double nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
  133. double nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
  134. //rozszerzenie ułamka drugiego
  135. double nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
  136. double nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
  137.  
  138. //nowy ulamek
  139. int nowy_licznik = nowy_licznik_pierwszego - nowy_licznik_drugiego;
  140. int nowy_mianownik = nowy_mianownik_pierwszego;
  141.  
  142. //skracanie ułamka
  143. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  144.  
  145. nowy_licznik = nowy_licznik/dzielnik;
  146. nowy_mianownik = nowy_mianownik/dzielnik;
  147.  
  148. _a = nowy_licznik;
  149. _b = nowy_mianownik;
  150.  
  151. return *this;
  152. }
  153.  
  154. Fraction&operator^(int potega){
  155. int nowy_licznik=1;
  156. int nowy_mianownik=1;
  157.  
  158. for(int i=0; i < potega; i++){
  159. nowy_licznik = nowy_licznik*this->getNumerator();
  160. nowy_mianownik = nowy_mianownik*this->getDenominator();
  161. }
  162.  
  163. //skracanie ułamka
  164. int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
  165.  
  166. nowy_licznik = nowy_licznik/dzielnik;
  167. nowy_mianownik = nowy_mianownik/dzielnik;
  168.  
  169. _a = nowy_licznik;
  170. _b = nowy_mianownik;
  171.  
  172. return *this;
  173.  
  174. }
  175.  
  176.  
  177.  
  178. };
  179.  
  180.  
  181. ostream & operator<< (ostream &out, Fraction &fraction){
  182. return out << fraction.getNumerator() << "/" << fraction.getDenominator();
  183. }
  184.  
  185. int main() {
  186. Fraction a(5,4);
  187. Fraction b(4,5);
  188. Fraction c = a+b;
  189. cout<<c.getValue()<<endl; // wypisuje 2.05
  190. cout<<(a*c)<<endl; // wypisuje 41/16
  191. cout<<(a^2)<<endl; // wypisuje 25/16
  192.  
  193. return 0;
  194. }
Add Comment
Please, Sign In to add comment