Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class Fraction
- {
- int numerator;
- int denominator;
- int gcd(int a, int b);
- void reduce();
- public:
- Fraction(int num, int denom)
- : numerator{ num }, denominator{ denom ? denom : 1 }
- {
- reduce();
- std::cout << "Fraction constructed for " << this << '\n';
- };
- Fraction() : Fraction(1, 1) {};
- ~Fraction() { std::cout << "Fraction destructed for " << this << '\n'; };
- void setNumerator(int num) { numerator = num; reduce(); };
- int getNumerator() const { return numerator; };
- void setDenominator(int denom) { denominator = denom ? denom : 1; reduce(); };
- int getDenominator() const { return denominator; };
- void print() const;
- Fraction& add(const Fraction& fract);
- Fraction& sub(const Fraction& fract);
- Fraction& mul(const Fraction& fract);
- Fraction& div(const Fraction& fract);
- };
- int Fraction::gcd(int a, int b)
- {
- while (b)
- {
- a %= b;
- std::swap(a, b);
- }
- return a;
- }
- void Fraction::reduce()
- {
- int gcdVal{ gcd(numerator, denominator) };
- numerator /= gcdVal;
- denominator /= gcdVal;
- if (denominator < 0 and numerator < 0)
- {
- denominator *= -1;
- numerator *= -1;
- }
- }
- Fraction& Fraction::add(const Fraction& fract)
- {
- numerator *= fract.denominator + fract.numerator * denominator;
- denominator *= fract.denominator;
- reduce();
- return *this;
- }
- Fraction& Fraction::sub(const Fraction& fract)
- {
- numerator *= fract.denominator - fract.numerator * denominator;
- denominator *= fract.denominator;
- reduce();
- return *this;
- }
- Fraction& Fraction::mul(const Fraction& fract)
- {
- numerator *= fract.numerator;
- denominator *= fract.denominator;
- reduce();
- return *this;
- }
- Fraction& Fraction::div(const Fraction& fract)
- {
- numerator *= fract.denominator;
- denominator *= fract.numerator;
- reduce();
- return *this;
- }
- void Fraction::print() const
- {
- std::cout << '(' << numerator << " / " << denominator << ")";
- }
- int main()
- {
- Fraction a{ 1,2 };
- Fraction b{ 1,3 };
- std::cout << " a + b = "; a.add(b).print(); std::cout << '\n';
- a.setNumerator(1); a.setDenominator(2);
- std::cout << " a - b = "; a.sub(b).print(); std::cout << '\n';
- a.setNumerator(1); a.setDenominator(2);
- std::cout << " a * b = "; a.mul(b).print(); std::cout << '\n';
- a.setNumerator(1); a.setDenominator(2);
- std::cout << " a / b = "; a.div(b).print(); std::cout << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement