// Fraction.h #include //#include /* namespace ecci { */ class Fraction { private: long long numerator = 0; long long denominator = 1; public: /// Default constructor, conversion constructor Fraction(long long numerator = 0, long long denominator = 1) : numerator(numerator) , denominator(denominator) { simplify(); } void read(); void print() const { std::cout << numerator << '/' << denominator; } bool simplify(); long long gcd() { return gcd(numerator, denominator); } // greatest common divisor static long long gcd(long long a, long long b); Fraction add(const Fraction& other) const; }; // main.cpp int main() { Fraction fr1; fr1.read(); std::cout << "fr1 = "; fr1.print(); Fraction fr2; std::cout << "\nfr2 = "; fr2.print(); Fraction fr3( 2, 3 ); std::cout << "\nfr3 = "; fr3.print(); Fraction fr4( -5 ); std::cout << "\nfr4 = "; fr4.print(); Fraction fr5 = -13; std::cout << "\nfr5 = "; fr5.print(); Fraction fr6 = Fraction(-13); std::cout << "\nfr6 = "; fr6.print(); Fraction fr7; fr7 = 27; std::cout << "\nfr7 = "; fr7.print(); Fraction sum = fr1.add(fr3); std::cout << "\nfr1 + fr3 = "; sum.print(); std::cout << std::endl; } // Fraction.cpp void Fraction::read() { std::cin >> numerator >> denominator; simplify(); } bool Fraction::simplify() { long long common = gcd(); numerator /= common; denominator /= common; /* if ( denominator < 0 ) { numerator *= -1; denominator *= -1; } */ return common > 1; } long long Fraction::gcd(long long a, long long b) { a = a >= 0 ? a : -a; b = b >= 0 ? b : -b; while ( b > 0 ) { long long t = b; b = a % b; a = t; } return a; } Fraction Fraction::add(const Fraction& other) const { return Fraction( this->numerator * other.denominator + denominator * other.numerator , denominator * other.denominator); } // } // namespace ecci