Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int nwd(int a, int b)
- {
- if(a * b == 0)
- return 1;
- if(a < 0)
- a = -a;
- if(b < 0)
- b = -b;
- while(a != b)
- {
- if(a > b)
- a -= b;
- if(b > a)
- b -= a;
- }
- return a;
- }
- class Wymierna
- {
- friend Wymierna operator+(Wymierna, Wymierna);
- friend Wymierna operator*(Wymierna, Wymierna);
- friend ostream& operator<<(ostream&, const Wymierna&);
- int licznik;
- int mianownik;
- public:
- Wymierna();
- Wymierna(int);
- Wymierna(int, int);
- double wartosc();
- void skracaj();
- };
- Wymierna::Wymierna() : licznik(0), mianownik(1) {}
- Wymierna::Wymierna(int x) : licznik(x), mianownik(1) {}
- Wymierna::Wymierna(int l, int m) : licznik(l), mianownik(m) {}
- double Wymierna::wartosc()
- {
- return 1.0 * licznik / mianownik;
- }
- void Wymierna::skracaj()
- {
- int d = nwd(licznik, mianownik);
- licznik /= d;
- mianownik /= d;
- }
- Wymierna operator+(Wymierna A, Wymierna B)
- {
- Wymierna wynik(A.licznik * B.mianownik + A.mianownik * B.licznik, A.mianownik * B.mianownik);
- wynik.skracaj();
- return wynik;
- }
- Wymierna operator*(Wymierna A, Wymierna B)
- {
- Wymierna wynik(A.licznik * B.licznik, A.mianownik * B.mianownik);
- wynik.skracaj();
- return wynik;
- }
- ostream& operator<<(ostream& str, const Wymierna& ob)
- {
- if(ob.mianownik == 1)
- {
- str << ob.licznik;
- return str;
- }
- str << ob.licznik << '/' << ob.mianownik;
- return str;
- }
- int main()
- {
- Wymierna A(1,2);
- Wymierna B(3,4);
- cout << A << " + " << B << " = " << A + B << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement