// 24_10_18.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #include #include using namespace std; class Fraction { int m_num, n_dem; public: Fraction(int n = 0, int m = 1) :m_num(n), n_dem(m) { reduce(); //odrazu skraca przy uruchomieniu } friend Fraction operator+(const Fraction &f1, const Fraction &f2) { return Fraction(f1.m_num*f2.n_dem + (f2.m_num*f1.n_dem), f1.n_dem*f2.n_dem); } friend Fraction operator-(const Fraction &f1, const Fraction &f2) { return Fraction(f1.m_num*f2.n_dem - (f2.m_num*f1.n_dem), f1.n_dem*f2.n_dem); } friend Fraction operator*(const Fraction &f1, const Fraction &f2) { return Fraction(f1.m_num*f2.m_num, f1.n_dem*f2.n_dem); } friend Fraction operator/(const Fraction &f1, const Fraction &f2) { return Fraction(f1.m_num*f2.n_dem, f1.n_dem*f2.m_num); } friend ostream& operator<<(ostream& out, const Fraction& f) { out << f.m_num << "/" << f.n_dem; return out; } friend istream& operator>>(istream& in, Fraction& f) { char a; in >> f.m_num; in >> a; in >> f.n_dem; assert(f.n_dem > 0); assert(a == '/'); return in; } operator double() { return ((double)m_num / (double)n_dem); } Fraction& operator++() { //inkrementacja m_num += n_dem; // zwraca a/b + 1 = (a+b)/b; return *this; } Fraction& reduce() { int min_value = abs(m_num) < abs(n_dem) ? abs(m_num) : abs(n_dem); int divisor = 2; while (divisor <= min_value) { if (abs(m_num) % divisor == 0 && (abs(n_dem) % divisor) == 0) { m_num /= divisor; n_dem /= divisor; min_value /= divisor; divisor = 2; } else { divisor++; } } return *this; //to oznacza biezacy obiekt } }; int main() { Fraction f1; Fraction f2; cout << "Enter fraction1:" << endl; cin >> f1; cout << "Enter fraction2:" << endl; cin >> f2; cout << "f1+f2=" << f1 + f2 << endl; cout << "f1*f2=" << f1 * f2 << endl; cout << "f1 as double=" << (double)f1 << endl; cout << "++f1=" << ++f1 << endl; return 0; }