You are on page 1of 4

//Farcas Madalina, e_2014, lab 8, problem 8, Fraction class

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Fraction
{
int a, b;
public:
static int icount;
int gcd();
Fraction();
Fraction(int a, int b);
~Fraction();
void set1(int a);
void set2(int b);
int get1();
int get2();
friend Fraction simplify(Fraction);
friend Fraction add(Fraction, Fraction);
friend Fraction subtract(Fraction, Fraction);
friend Fraction divide(Fraction, Fraction);
friend Fraction multiply(Fraction, Fraction);
};
int Fraction::icount;
int Fraction::gcd()
{
int r, c, d;
c = a;
d = b;
r = c%d;
while (r)
{
c = d;
d = r;
r = c%d;
}
return d;
}
Fraction::Fraction()
{
a = 0;
b = 1;
icount++;
}
Fraction::Fraction(int a, int b)
{
this->a = a;
this->b = b;
icount++;
}
Fraction::~Fraction()
{
cout << "\nThere are " << icount-- << " objects";
}
void Fraction::set1(int a)
{
this->a = a;
}
void Fraction::set2(int b)
{
this->b = b;
}

int Fraction::get1()
{
return a;
}
int Fraction::get2()
{
return b;
}
Fraction simplify(Fraction ob)
{
Fraction f;
f.a = ob.a / ob.gcd();
f.b = ob.b / ob.gcd();
return f;
}
Fraction add(Fraction f1, Fraction f2)
{
Fraction f;
if (f1.b == f2.b)
{
f.a = f1.a + f2.a;
f.b = f1.b;
}
else
{
f.a = f1.a*f2.b + f2.a*f1.b;
f.b = f1.b*f2.b;
}
return f;
}
Fraction subtract(Fraction f1, Fraction f2)
{
Fraction f;
if (f1.b == f2.b)
{
f.a = f1.a - f2.a;
f.b = f1.b;
}
else
{
f.a = f1.a*f2.b - f2.a*f1.b;
f.b = f1.b*f2.b;
}
return f;
}
Fraction divide(Fraction f1, Fraction f2)
{
Fraction f;
f.a = f1.a*f2.b;
f.b = f1.b*f2.a;
return f;
}
Fraction multiply(Fraction f1,Fraction f2)
{
Fraction f;
f.a = f1.a*f2.a;
f.b = f1.b*f2.b;
return f;
}

void main()
{
Fraction c1;
int a, b;
cout << "\nInsert the numerator of the first fraction: "; cin >> a;
cout << "Insert the denominatore of the first fraction"; cin >> b;
if (b != 0)
{
c1.set1(a);
c1.set2(b);
}
else
{
cout << "Error!";
return;
}
cout << "\nThe attributes of the first object: " << c1.get1() << ", " <<
c1.get2();
cout << "\nInsert the numerator of the second fraction: "; cin >> a;
cout << "Insert the denominator of the second fraction"; cin >> b;
if (b == 0)
{
cout << "Error!";
cin.get();
cin.ignore();
exit(0);
}
Fraction c2(a, b), sum,diff, quot, prod;
cout << "\nThe attributes of the second object: " << c2.get1() << ", " <
< c2.get2();
cout << "\n The first fraction after simplification is: ";
c1 = simplify(c1);
cout << c1.get1() << "/" << c1.get2();
cout << "\nThe second fraction after simplification is: ";
c2 = simplify(c2);
cout << c2.get1() << "/" << c2.get2();
cout << "\nThe sum of the two fractions after simplification is: ";
sum = add(c1, c2);
sum=simplify(sum);
cout << sum.get1() << "/" << sum.get2();
cout << "\nThe difference of the two fractions after simplification is:
";
diff = subtract(c1, c2);
diff=simplify(diff);
cout << diff.get1() << "/" << diff.get2();
cout << "\nThe product of the two fractions after simplification is: ";
prod = multiply(c1, c2);
prod=simplify(prod);
cout << prod.get1() << "/" << prod.get2();
cout << "\nThe quotient of the two fractions after simplification is: ";
quot = divide(c1, c2);
quot=simplify(quot);
cout << quot.get1() << "/" << quot.get2();
cin.get();
cin.ignore();
}

You might also like