Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "Rational.h"
- int gcd(int a, int b) {
- while (b) {
- a %= b;
- int z = a;
- a = b;
- b = z;
- }
- return a;
- }
- int NOK(int a, int b)
- {
- return a * b / gcd(a, b);
- }
- void FractionReduction(Rational& r) {
- int num = r.getNumenator();
- int denom = r.getDenominator();
- int c = gcd(num, denom);
- num /= c;
- denom /= c;
- r.setNumenator(num);
- r.setDenominator(denom);
- }
- Rational::Rational(int num, int denom) {
- numenator = num;
- denominator = denom;
- if (denominator == 0) {
- throw DivisionByZeroException("Division by zero exception");
- }
- }
- void Rational::setNumenator(int a) {
- numenator = a;
- }
- void Rational::setDenominator(int a) {
- denominator = a;
- }
- int Rational::getDenominator() const {
- return denominator;
- }
- int Rational::getNumenator() const {
- return numenator;
- }
- double Rational::getDouble() const {
- return static_cast<double> (numenator) / denominator;
- }
- std::ostream& operator<< (std::ostream& out, const Rational &rational) {
- out << rational.numenator << "/" << rational.denominator << std::endl;
- return out;
- }
- std::istream& operator>> (std::istream& in, Rational &rational) {
- in >> rational.numenator;
- in >> rational.denominator;
- rational = Rational(rational.numenator, rational.denominator);
- return in;
- }
- Rational& operator*=(Rational& r1, const Rational r2)
- {
- int a = r1.getNumenator() *r2.getNumenator();
- int b = r1.getDenominator() * r2.getDenominator();
- r1.setNumenator(a);
- r1.setDenominator(b);
- FractionReduction(r1);
- return r1;
- }
- Rational& operator+=(Rational& r1, const Rational& r2) {
- int denom1 = r1.getDenominator();
- int denom2 = r2.getDenominator();
- int nok = NOK(denom1, denom2);
- denom1 = nok / denom1;
- denom2 = nok / denom2;
- int num = denom1 * r1.getNumenator() + denom2 * r2.getNumenator();
- r1.setNumenator(num);
- r1.setDenominator(nok);
- FractionReduction(r1);
- return r1;
- }
- bool operator==(const Rational& lhs, const Rational& rhs)
- {
- if (lhs.getDouble() == rhs.getDouble()) {
- return true;
- }
- else {
- return false;
- }
- }
- bool operator>(const Rational& lhs, const Rational& rhs)
- {
- if (lhs.getDouble() > rhs.getDouble()) {
- return true;
- }
- else {
- return false;
- }
- }
- Rational operator+(const Rational& r1, const Rational& r2) {
- Rational r;
- int denom1 = r1.getDenominator();
- int denom2 = r2.getDenominator();
- int nok = NOK(denom1, denom2);
- denom1 = nok / denom1;
- denom2 = nok / denom2;
- int num = denom1 * r1.getNumenator() + denom2 * r2.getNumenator();
- r.setNumenator(num);
- r.setDenominator(nok);
- FractionReduction(r);
- return r;
- }
- Rational operator*(const Rational& r1, const Rational& r2) {
- Rational r;
- int a = r1.getNumenator() * r2.getNumenator();
- int b = r1.getDenominator() * r2.getDenominator();
- r.setNumenator(a);
- r.setDenominator(b);
- FractionReduction(r);
- return r;
- }
- Rational& operator-(Rational& r)
- {
- int a = r.getNumenator() * -1;
- r.setNumenator(a);
- return r;
- }
- DivisionByZeroException::DivisionByZeroException(std::string error)
- :m_error(error)
- {
- }
- const char* DivisionByZeroException::getError(){ return m_error.c_str(); }
- int main()
- {
- try {
- /*Rational drob1(15, 3);
- FractionReduction(drob1);
- std::cout << drob1;*/
- /*Rational drob2(5, 4);*/
- /*std::cin >> drob;
- std::cout << drob;*/
- //std::cout << drob.getDouble();
- /*drob1 *= drob2;
- std::cout << drob1;*/
- /*bool equals = drob1 == drob2;
- bool less = drob1 > drob2;
- std::cout << less;*/
- /*std::cout << -drob1;*/
- Rational drob;
- Rational drob1(3,2);
- Rational drob2(1,2);
- drob = -drob2 + drob1;
- std::cout << drob;
- }
- catch (DivisionByZeroException& exception) {
- std::cerr << "A Rational exception occured (" << exception.getError() << ")\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement