#include <iostream>
#include <cstdlib>
using namespace std;
class Fraction
{
long int numerator;
long int denominator;
void reduce();
public:
Fraction(long int, long int);
Fraction(const Fraction&);
Fraction operator-(const Fraction&) const;
bool positive() const;
void view() const;
};
Fraction::Fraction(long int n, long int d) : numerator(n), denominator(d)
{
if(d == 0)
{
cout << "Error, denominator cannot be 0\n";
exit(1);
}
reduce();
}
Fraction::Fraction(const Fraction& r) : numerator(r.numerator), denominator(r.denominator) {}
void Fraction::reduce()
{
// сокращаем дробь:
for(long divisor = 2; divisor <= numerator && divisor <= denominator; ++divisor)
while(numerator % divisor == 0 && denominator % divisor == 0)
// можно и так: while(!(numerator % divisor) && !(denominator % divisor))
{
numerator /= divisor;
denominator /= divisor;
}
if(numerator == 0)
denominator = 1;
}
Fraction Fraction::operator-(const Fraction& r) const
{
long n1 = numerator * r.denominator;
long n2 = r.numerator * denominator;
d = denominator * r.denominator;
Fraction result(n1 - n2, d);
result.reduce();
return result;
}
bool Fraction::positive() const
{
return numerator > 0 && denominator > 0 || numerator < 0 && denominator < 0;
}
void Fraction::view() const
{
cout << "Object Fraction:\n";
cout << "Numerator = " << numerator << endl;
cout << "Denominator = " << denominator << endl;
}
int main()
{
Fraction F1(123, 29), F2(29, 123);
F1.view();
F2.view();
cout << "Substracting:\n";
Fraction F3 = F1 - F2;
F3.view();
if(F3.positive())
cout << "is positive\n";
else
cout << "is non-positive\n";
}
Помогите, очень нужно, от этого зависит мой зачёт!
Реализовать абстрактный тип данных «Рациональная дробь»
вычитание двух дробей и проверка дроби на положительность;
[COLOR="Red"]Неверное название темы - 5 баллов нарушение.[/COLOR]
Пример на C++