Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Fraction {
- public:
- Fraction() : Fraction(1, 1) {}
- Fraction(int num, int denom) : numerator(num), denominator(denom) {}
- Fraction(const Fraction& fract) : numerator(fract.numerator), denominator(fract.denominator) {}
- Fraction& operator+=(const Fraction& other) {
- numerator = numerator * other.denominator + denominator * other.numerator;
- denominator *= other.denominator;
- Reduction();
- return *this;
- }
- Fraction& operator-=(const Fraction& other) {
- numerator = numerator * other.denominator - denominator * other.numerator;
- denominator *= other.denominator;
- Reduction();
- return *this;
- }
- Fraction& operator*=(const Fraction& other) {
- numerator *= other.numerator;
- denominator *= other.denominator;
- Reduction();
- return *this;
- }
- Fraction& operator/=(const Fraction& other) {
- numerator *= other.denominator;
- denominator *= other.numerator;
- Reduction();
- return *this;
- }
- int Numerator() const {
- return numerator;
- }
- int Denominator() const {
- return denominator;
- }
- ~Fraction() {}
- void print() {
- std::cout << numerator << " / " << denominator << std::endl;
- }
- private:
- void Reduction() {
- if (denominator < 0) {
- numerator = -numerator;
- denominator = -denominator;
- }
- int x = abs(numerator); // берем значение по модулю на случай отрицательных значений
- int y = abs(denominator); // берем значение по модулю на случай отрицательных значений
- while (x != y) {
- if (x > y) {
- x = x - y;
- }
- else {
- y = y - x;
- }
- }
- numerator /= x;
- denominator /= x;
- }
- int numerator;
- int denominator;
- };
- Fraction operator+(const Fraction& left, const Fraction& right) {
- Fraction temp = left;
- temp += right;
- return temp;
- }
- Fraction operator-(const Fraction& left, const Fraction& right) {
- Fraction temp = left;
- temp -= right;
- return temp;
- }
- Fraction operator*(const Fraction& left, const Fraction& right) {
- Fraction temp = left;
- temp *= right;
- return temp;
- }
- Fraction operator/(const Fraction& left, const Fraction& right) {
- Fraction temp = left;
- temp /= right;
- return temp;
- }
- bool operator==(const Fraction& left, const Fraction& right) {
- return left.Numerator() == right.Numerator() && left.Denominator() == right.Denominator();
- }
- bool operator!=(const Fraction& left, const Fraction& right) {
- return left.Numerator() != right.Numerator() || left.Denominator() != right.Denominator();
- }
- bool operator>(const Fraction& left, const Fraction& right) {
- return left.Numerator() * right.Denominator() > right.Numerator() * left.Denominator();
- }
- bool operator<(const Fraction& left, const Fraction& right) {
- return left.Numerator() * right.Denominator() < right.Numerator() * left.Denominator();
- }
- bool operator>=(const Fraction& left, const Fraction& right) {
- return left.Numerator() * right.Denominator() >= right.Numerator() * left.Denominator();
- }
- bool operator<=(const Fraction& left, const Fraction& right) {
- return left.Numerator() * right.Denominator() <= right.Numerator() * left.Denominator();
- }
- ostream& operator<<(ostream& output, const Fraction& fraction) {
- output << fraction.Numerator() << " / " << fraction.Denominator();
- return output;
- }
- istream& operator>>(istream& input, Fraction& fraction) { // по неконстантной ссылке!
- int numerator, denominator;
- char slash;
- input >> numerator >> slash >> denominator;
- fraction = Fraction(numerator, denominator);
- return input;
- }
- int main() {
- Fraction a(1, 2);
- Fraction b(3, 4);
- cout << (a += b) << endl;
- cout << (a -= b) << endl;
- cout << (a *= b) << endl;
- cout << (a /= b) << endl;
- cout << a + b << endl;
- cout << a - b << endl;
- cout << a * b << endl;
- cout << a / b << endl;
- cout << "a = " << a << endl;
- cout << "b = " << b << endl;
- cout << boolalpha;
- cout << "a == b " << (a == b) << endl;
- cout << "a != b " << (a != b) << endl;
- cout << "a > b " << (a > b) << endl;
- cout << "a < b " << (a < b) << endl;
- cout << "a >= b " << (a >= b) << endl;
- cout << "a <= b " << (a <= b) << endl;
- Fraction n;
- cout << "Enter n: ";
- cin >> n;
- cout << n << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment