Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <sstream>
- #include <fstream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- class Rational
- {
- public:
- Rational()
- {
- numenator = 0;
- denominator = 1;
- }
- Rational(int num, int denom) //Конструктор должен делать дробь несократимой
- {
- numenator = num;
- denominator = denom;
- int tmp = nod(num, denom);
- numenator /= tmp;
- denominator /= tmp;
- if(denominator < 0)
- {
- denominator *= -1;
- numenator *= -1;
- }
- }
- int Numerator() const //Возвращает числитель
- {
- return numenator;
- }
- int Denominator() const //Возвращает знаминатель
- {
- return denominator;
- }
- private:
- int numenator;
- int denominator;
- int nod(int a, int b)
- {
- int tmp = max(a, b);
- while((a % tmp != 0) || (b % tmp != 0))
- {
- tmp--;
- }
- return tmp;
- }
- };
- bool operator==(const Rational& r1, const Rational& r2)
- {
- if((r1.Denominator()==r2.Denominator())&&(r1.Numerator()==r2.Numerator()))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- Rational operator*(const Rational& r1, const Rational& r2)
- {
- Rational ret(r1.Numerator()*r2.Numerator(), r1.Denominator()*r2.Denominator());
- return ret;
- }
- Rational operator/(const Rational& r1, const Rational& r2)
- {
- Rational ret(r1.Numerator() * r2.Denominator(), r1.Denominator() * r2.Numerator());
- return ret;
- }
- Rational operator+(const Rational& r1, const Rational& r2)
- {
- int num1 = r1.Numerator();
- int num2 = r2.Numerator();
- int denom1 = r1.Denominator();
- int denom2 = r2.Denominator();
- if (denom1 == denom2)
- {
- Rational rat(num1 + num2, denom1);
- return rat;
- }
- int tmpdenom1 = denom1;
- int tmpdenom2 = denom2;
- num1 *= tmpdenom2;
- denom1 *= tmpdenom2;
- num2 *= tmpdenom1;
- denom2 *= tmpdenom1;
- Rational rat(num1+num2, denom1);
- return rat;
- }
- Rational operator-(const Rational& r1, const Rational& r2)
- {
- int num1 = r1.Numerator();
- int num2 = r2.Numerator();
- int denom1 = r1.Denominator();
- int denom2 = r2.Denominator();
- if (denom1 == denom2)
- {
- Rational rat(num1 - num2, denom1);
- return rat;
- }
- int tmpdenom1 = denom1;
- int tmpdenom2 = denom2;
- num1 *= tmpdenom2;
- denom1 *= tmpdenom2;
- num2 *= tmpdenom1;
- denom2 *= tmpdenom1;
- Rational rat(num1 - num2, denom1);
- return rat;
- }
- ostream& operator<<(ostream& stream, Rational rat)
- {
- stream << rat.Numerator() << '/' << rat.Denominator();
- return stream;
- }
- int main()
- {
- //Это всё тесты.
- {
- const Rational r(3, 10);
- if (r.Numerator() != 3 || r.Denominator() != 10)
- {
- cout << "Rational(3, 10) != 3/10" << endl;
- return 1;
- }
- }
- {
- const Rational r(8, 12);
- if (r.Numerator() != 2 || r.Denominator() != 3) {
- cout << "Rational(8, 12) != 2/3" << endl;
- return 2;
- }
- }
- {
- const Rational r(-4, 6);
- if (r.Numerator() != -2 || r.Denominator() != 3) {
- cout << "Rational(-4, 6) != -2/3" << endl;
- return 3;
- }
- }
- {
- const Rational r(4, -6);
- if (r.Numerator() != -2 || r.Denominator() != 3) {
- cout << "Rational(4, -6) != -2/3" << endl;
- return 3;
- }
- }
- {
- const Rational r(0, 15);
- if (r.Numerator() != 0 || r.Denominator() != 1) {
- cout << "Rational(0, 15) != 0/1" << endl;
- return 4;
- }
- }
- {
- const Rational defaultConstructed;
- if (defaultConstructed.Numerator() != 0 || defaultConstructed.Denominator() != 1) {
- cout << "Rational() != 0/1" << endl;
- return 5;
- }
- }
- cout << "OK" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement