Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a C++ program which create a class for working with mixed fractions . MUST

ID: 3932322 • Letter: W

Question

Write a C++ program which create a class for working with mixed fractions. MUST BE MIXED, NOT IMPROPER. GIVEN: The main.

class Fraction {
public:
   Fraction(int = 1, int = 1, int = 1);
   void printData();
   void add(Fraction, Fraction);
   void sub(Fraction, Fraction);
   void mult(Fraction, Fraction);
   void divide(Fraction, Fraction);
   Fraction recip();
   void reduce();

private:
   int whole, num, den;
};

int main()
{
   Fraction f1(8, 12, 14), f2(3, 4, 6), sum, diff, prod, quo;
   cout << "The fractions are " << endl;
   f1.printData();
   cout << " and ";
   f2.printData();
   cout << endl << endl;
   sum.add(f1, f2);
   diff.sub(f1, f2);
   prod.mult(f1, f2);
   quo.divide(f1, f2);
   cout << "Sum is ";
   sum.printData();
   cout << endl << endl;
   cout << "Difference is ";
   diff.printData();
   cout << endl << endl;
   cout << "Product is ";
   prod.printData();
   cout << endl << endl;
   cout << "Quotient is ";
   quo.printData();
   cout << endl << endl;
f1.recip();
   f2.recip();
   cout << "The reciprocals are ";
   f1.printData();
   cout << " ";
   f2.printData();
   cout << endl << endl;
   system("PAUSE");
   return 0;
}

Output should have MIXED FRACTIONS ONLY. Not improper fractions.

Explanation / Answer

PROGRAM CODE:

/*

* main.cpp

*

* Created on: 31-Oct-2016

* Author: kaju

*/

#include <iostream>

using namespace std;

class Fraction {

public:

Fraction(int = 1, int = 1, int = 1);

void printData();

void add(Fraction, Fraction);

void sub(Fraction, Fraction);

void mult(Fraction, Fraction);

void divide(Fraction, Fraction);

Fraction recip();

void reduce();

private:

int whole, num, den;

};

void Fraction::reduce()

{

   while(num%2 == 0 && den%2 == 0)

   {

       num = num/2;

       den = den/2;

   }

   while(num%3 == 0 && den%3 == 0)

   {

       num = num/3;

       den = den/3;

   }

   while(num%5 == 0 && den%5 == 0)

   {

       num = num/5;

       den = den/5;

   }

}

Fraction::Fraction(int whole, int num, int den)

{

   this->den = den;

   this->whole = whole;

   this->num = num;

   reduce();

}

void Fraction::printData()

{

   if(whole == 0)

       cout<<num<<"/"<<den;

   else

       cout<<whole<<" "<<num<<"/"<<den;

}

void Fraction::add(Fraction num1, Fraction num2)

{

   int improperNum1, improperNum2;

   improperNum1 = num1.den*num1.whole+num1.num;

   improperNum2 = num2.den*num2.whole+num2.num;

   int sum;

   if(num1.den == num2.den)

   {

       sum = improperNum1 + improperNum2;

       whole = sum/num1.den;

       num = sum%num1.den;

       den = num1.den;

   }

   else

   {

       den = num1.den*num2.den;

       sum = improperNum1*num2.den + improperNum2*num1.den;

       whole = sum/den;

       num = sum%den;

   }

   reduce();

}

void Fraction::sub(Fraction num1, Fraction num2)

{

   int improperNum1, improperNum2;

   improperNum1 = num1.den*num1.whole+num1.num;

   improperNum2 = num2.den*num2.whole+num2.num;

   int sub;

   if(num1.den == num2.den)

   {

       sub = improperNum1 - improperNum2;

       whole = sub/num1.den;

       num = sub%num1.den;

       den = num1.den;

   }

   else

   {

       sub = improperNum1*num2.den - improperNum2*num1.den;

       den = num1.den*num2.den;

       whole = sub/den;

       num = sub%den;

   }

   reduce();

}

void Fraction::mult(Fraction num1, Fraction num2)

{

   int improperNum1, improperNum2, numerator;

   improperNum1 = num1.den*num1.whole+num1.num;

   improperNum2 = num2.den*num2.whole+num2.num;

   den = num1.den*num2.den;

   numerator = improperNum1*improperNum2;

   whole = numerator/den;

   num = numerator%den;

   reduce();

}

void Fraction::divide(Fraction num1, Fraction num2)

{

   int improperNum1, improperNum2, numerator;

   improperNum1 = num1.den*num1.whole+num1.num;

   improperNum2 = num2.den*num2.whole+num2.num;

   den = num1.den*improperNum2;

   numerator = improperNum1*num2.den;

   whole = numerator/den;

   num = numerator%den;

   reduce();

}

Fraction Fraction::recip()

{

   Fraction f1(0,0,1);

   int numerator = whole * den + num;

   f1.den = numerator;

   if(f1.den<den)

   {

       f1.whole = 0;

       f1.num = den;

   }

   else

   {

       f1.whole = den/f1.den;

       f1.num = den%f1.den;

   }

   reduce();

   return f1;

}

int main()

{

   Fraction f1(8, 12, 14), f2(3, 4, 6), sum, diff, prod, quo;

   cout << "The fractions are " << endl;

   f1.printData();

   cout << " and ";

   f2.printData();

   cout << endl << endl;

   sum.add(f1, f2);

   diff.sub(f1, f2);

   prod.mult(f1, f2);

   quo.divide(f1, f2);

   cout << "Sum is ";

   sum.printData();

   cout << endl << endl;

   cout << "Difference is ";

   diff.printData();

   cout << endl << endl;

   cout << "Product is ";

   prod.printData();

   cout << endl << endl;

   cout << "Quotient is ";

   quo.printData();

   cout << endl << endl;

   f1 = f1.recip();

   f2 = f2.recip();

   cout << "The reciprocals are ";

   f1.printData();

   cout << " ";

   f2.printData();

   cout << endl << endl;

   return 0;

}


OUTPUT:

The fractions are

8 6/7 and 3 2/3

Sum is 12 11/21

Difference is 5 4/21

Product is 32 10/21

Quotient is 2 32/77

The reciprocals are 7/62 3/11

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote