Design a C++ program containing a class Fraction. The class data should have two
ID: 3813546 • Letter: D
Question
Design a C++ program containing a class Fraction. The class data should have two variables numerator and denominator, both of type integer, to represent the fraction numerator/denominator. The fraction representation within the object must allow no simplification. That is, the numerator and denominator have to have no common divisor different from 1. For example, the fraction 4/6 must be represented as 2/3. Be sure to implement the following features: The class constructor must take two integers numbers (numerator and denominator). For negative fractions, the numerator must be negative and denominator must be positive. Include the method simplify that takes two numbers and returns a fraction object (representing a fraction that cannot be simplified). Include a method add that takes two fraction objects and returns their sum (as a fraction object). Include a method diff that takes two fraction objects and returns their difference (as a fraction object). Implement overloaded operators + and - for addition and subtraction of fractions. Implement overloaded comparison operators == and != for comparing two fraction objects. Test your class in the main() method by creating several fractions, adding them, subtracting them, and printing the result by using the / sign (e.g., 2/3), not as decimal fractions. Also demonstrate usage of the overloaded operators.
Explanation / Answer
#include<iostream>
using namespace std;
class fraction
{
private:
int nr;
int dr;
public:
fraction(int N, Int D);
int operator!=(fraction f1);
fraction operator+(fraction f1);
fraction operator-(fraction f1);
fraction add(fraction f1, fraction f2);
fraction sub(fraction f1, fraction f2);
int gcd(int a,int b);
};
fraction:: fraction(int N=1,int D=1)
{
nr=N;
dr=D;
}
fraction fraction::add (fraction f1, fraction f2)
{
int add = f1.nr*f2.dr + f2.nr*f1.dr ;
int c= gcd(add,f1.dr*f2.dr);
fraction res(add/c,(f1.dr*f2.dr)/c);
return res;
}
fraction fraction::sub (fraction f1, fraction f2)
{
int sub = f1.nr*f2.dr - f2.nr*f1.dr ;
int c= gcd(sub,f1.dr*f2.dr);
fraction res(sub/c,(f1.dr*f2.dr)/c);
return res;
}
int fraction::gcd(int a, int b )
{
if(a<0)
a=a*-1;
if(b<0)
b=b*-1;
if(b==0) return a;
if(a>b)
return gcd(b, a%b);
else
return gcd(a, b%a);
}
fraction fraction:: operator+(fraction f1)
{
int mul = this->dr * f1.dr;
int add=this.nr*f1.dr+f1.nr*this.dr;
int c = gcd(mul,add);
this->nr=add/c;
this->dr=mul/c;
return this;
}
fraction fraction:: operator-(fraction f1)
{
int mul = this->dr * f1.dr;
int sub=this.nr*f1.dr-f1.nr*this.dr;
int c = gcd(mul,sub);
this->nr=sub/c;
this->dr=mul/c;
return this;
}
int fraction:: operator==(fraction f1)
{
int c1= gcd(this.nr,f1.nr);
int c2=gcd(this.dr,f2.dr);
if((this.nr/c1==f1.nr/c1)&&(thid.dr/c2==f1.dr/c2))
return 1;
else
return 0;
}
int fraction:: operator!=(fraction f1)
{
int c1= gcd(this.nr,f1.nr);
int c2=gcd(this.dr,f2.dr);
if((this.nr/c1==f1.nr/c1)&&(thid.dr/c2==f1.dr/c2))
return 0;
else
return 1;
}
int main()
{
fraction f1;
fraction f2(3,5);
fraction f3= add(f1,f2);
cout<<f3.nr<<"/"<<f3.dr;
fraction f4(7,3);
fraction f5(6, 9);
fraction f6= sub(f4,f5);
cout<<f6.nr<<"/"<<f6.dr;
fraction f7=f3+f6;
cout<<f7.nr<<"/"<<f7.dr;
if (f7==f6)
cout<<"="<<endl;
else
cout<<"!="<<endl;
return 0;
}