Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- class Rational {
- public:
- Rational() {
- // Реализуйте конструктор по умолчанию
- p=0;
- q=1;
- //для отладки
- //cout << "Hi, I am a Default Counstructor" << endl;
- }
- Rational(int numerator, int denominator) {
- // Реализуйте конструктор
- if (numerator==0) {
- p=0;
- q=1;
- } else {
- int s = FindSign(numerator, denominator);
- int nod=FindNod(numerator,denominator);
- numerator=abs(numerator);
- denominator=abs(denominator);
- p=numerator/nod;
- q=denominator/nod;
- p=p*s;
- }
- //для отладки
- //cout << p << "/" << q << endl;
- }
- int Numerator() const {
- // Реализуйте этот метод
- return p;
- }
- int Denominator() const {
- // Реализуйте этот метод
- return q;
- }
- private:
- // Добавьте поля
- int p, q;
- int FindNod (int a, int b) {
- int nod=1;
- int i = 1;
- while(i!=0) {
- i=(a % b);
- nod=b;
- a=b;
- b=i;
- }
- return nod;
- }
- int FindSign (int c, int d) {
- int mult = c*d;
- if (mult >=0) {
- return 1;
- } else {
- return -1;
- }
- }
- };
- bool operator == (const Rational r1, const Rational r2) {
- if (r1.Numerator()==r2.Numerator ()&& r1.Denominator()==r2.Denominator()) {
- return 1;
- } else {
- return 0;
- }
- }
- Rational operator + (const Rational r1, const Rational r2) {
- if (r1.Denominator()==r2.Denominator()) {
- return Rational(r1.Numerator()+r2.Numerator(), r1.Denominator());
- } else {
- return Rational(r1.Numerator()*r2.Denominator() + r2.Numerator()*r1.Denominator(), r1.Denominator()*r2.Denominator());
- }
- }
- Rational operator - (const Rational r1, const Rational r2) {
- if (r1.Denominator()==r2.Denominator()) {
- return Rational (r1.Numerator()-r2.Numerator(), r1.Denominator());
- } else {
- return Rational (r1.Numerator()*r2.Denominator()-r2.Numerator()*r1.Denominator(), r1.Denominator()*r2.Denominator());
- }
- }
- int main() {
- {
- Rational r1(4, 6);
- Rational r2(2, 3);
- bool equal = r1 == r2;
- if (!equal) {
- cout << "4/6 != 2/3" << endl;
- return 1;
- }
- }
- {
- Rational a(2, 3);
- Rational b(4, 3);
- Rational c = a + b;
- bool equal = c == Rational(2, 1);
- if (!equal) {
- cout << "2/3 + 4/3 != 2" << endl;
- return 2;
- }
- }
- {
- Rational a(5, 7);
- Rational b(2, 9);
- Rational c = a - b;
- bool equal = c == Rational(31, 63);
- if (!equal) {
- cout << "5/7 - 2/9 != 31/63" << endl;
- return 3;
- }
- }
- cout << "OK" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement