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

Someone helped me with this code. While it works fantastic, I need help adding t

ID: 668867 • Letter: S

Question

Someone helped me with this code. While it works fantastic, I need help adding the ability to ask the user for a whole number part of the fraction (like 3 1/2), and do functions with/without a whole number portion present:

// FractionWholeNumber.cpp

//Header files
#include "stdafx.h"    //optional
#include <iostream>
using namespace std;

//Structure Fraction contains
//three integer variables
struct Fraction
{
     int wholeNum;
     int numerator;
     int denominator;
};

//enterFractionValue() prompts the user to enter the Fraction
//details

Fraction enterFractionValue()
{
     Fraction obj;

     cout<<"Enter numerator value of fraction: ";
     cin>>obj.numerator;

     cout<<"Enter denominator value of fraction: ";
     cin>>obj.denominator;

     while(obj.denominator==0)
     {
          cout<<"Enter denominator value of fraction: ";
          cin>>obj.denominator;
     }
     return obj;
}

//gcd function returns if any further reduction of the
//Fraction can be done
int gcd(int numi, int deno)
{
     return (numi==0)?deno:gcd(deno%numi,numi);
}

//reduceFraction() function reduces the Fraction and
//returns the new Fraction object
Fraction reduceFraction(Fraction obj)
{
     Fraction newObj;
     newObj.wholeNum = obj.numerator/obj.denominator;
     obj.numerator = obj.numerator%obj.denominator;

     //reduce the fraction further
     int common=gcd(obj.numerator, obj.denominator);
     newObj.numerator = obj.numerator/common;
     newObj.denominator = obj.denominator/common;
     return newObj;
}

//displayFraction() function displays the Fraction object
//details
void displayFraction(Fraction obj)
{
     cout<<obj.wholeNum<<" ";
     if(obj.numerator!=0)
          cout<<obj.numerator<<"/"<<obj.denominator;
}

//add() function adds two fraction objects
//and returns the new Fraction object
Fraction add(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.denominator + obj2.numerator*obj1.denominator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;
}

//multiply() function multiplies two fraction objects
//and returns the new Fraction object
Fraction multiply(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.numerator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;
}

//subtract() function multiplies two fraction objects
//and returns the new Fraction object
Fraction subtract(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.denominator - obj2.numerator*obj1.denominator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;

}

//main function
int main()
{
     //Create three Fractional objects
     Fraction object1, object2, object3;

     //declare one char variables
     char arthiOperator;

     //read the fractional values into two Fraction
     //objects
     object1 = enterFractionValue();
     object2 = enterFractionValue();

     cout<<endl;

     //Prompt the user to enter his/her choice
     cout<<"Choose any one of the following operations: "<<endl;
     cout<<"+ - to add two fractions "<<endl;
     cout<<"- - to subtract two fractions "<<endl;
     cout<<"* - to multiply two fractions "<<endl;
     cout<<"Enter your operator to prefrom the operation: ";
     cin>>arthiOperator;
     cout<<endl;

     //depending on the operator call the respective operation
     //function and display the value
     //condition for if user chooses '+' operator
     if(arthiOperator=='+')
     {
          object3 = add(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" + ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;

     }

     //condition for if user chooses '-' operator
     else if(arthiOperator=='-')
     {
          object3 = subtract(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" - ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;      

     }

     //condition for if user chooses '*' operator
     else if(arthiOperator=='*')
     {
          object3 = multiply(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" * ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;
     }

     //display the error message if the user does not choose
     //proper operator
     else
          cout<<"Sorry! Operation can not be performed by using "<<arthiOperator<<endl;

     system("pause");
     return 0;
}

Here is the original problem:

In earlier chapters, you developed a Fraction structure for Teacher’s Pet Software. The
structure contains three public data fields for whole number, numerator, and denominator.
Using the same structure, write a main()function in which you create three Fraction
objects. Prompt the user for values for each field for two of the Fractions. Add statements
to the main()function to do the following:
» Do not allow the user to enter a 0 denominator for any Fraction; continue to prompt
the user until an acceptable denominator is entered.
» Reduce each Fraction to proper fraction form and display it. For example, the following
table shows some user entries and the output you should display.

Prompt the user to enter an arithmetic operation: + or *. Calculate the third Fraction to
be the result of applying the requested operation to the two entered Fractions. Display
the result as a whole number, if any, and the fractional part, if any. Reduce the result to
proper form. For example, adding 1/4 and 1/4 results in 1/2, adding 3/4 and 3/4 results in
1 1/2, subtracting 1/5 from 3/1 results in 2 4/5, and multiplying 1/3 by 6/1 results in 2.

Explanation / Answer

Here is your solution, but if you have any doubt then you can ask but please mention some examples.

This program is working for all the testcases that you have mentioned in your problem.


#include <iostream>
using namespace std;

//Structure Fraction contains
//three integer variables
struct Fraction
{
     int wholeNum;
     int numerator;
     int denominator;
};

//enterFractionValue() prompts the user to enter the Fraction
//details

Fraction enterFractionValue()
{
     Fraction obj;

     cout<<"Enter Whole Number value: ";
     cin>>obj.wholeNum;

     cout<<"Enter numerator value of fraction: ";
     cin>>obj.numerator;

     cout<<"Enter denominator value of fraction: ";
     cin>>obj.denominator;

     while(obj.denominator==0)
     {
          cout<<"Enter denominator value of fraction: ";
          cin>>obj.denominator;
     }
     obj.numerator=(obj.denominator*obj.wholeNum)+obj.numerator;
     obj.wholeNum=0;
     return obj;
}

//gcd function returns if any further reduction of the
//Fraction can be done
int gcd(int numi, int deno)
{
     return (numi==0)?deno:gcd(deno%numi,numi);
}

//reduceFraction() function reduces the Fraction and
//returns the new Fraction object
Fraction reduceFraction(Fraction obj)
{
     Fraction newObj;
     newObj.wholeNum = obj.numerator/obj.denominator;
     obj.numerator = obj.numerator%obj.denominator;

     //reduce the fraction further
     int common=gcd(obj.numerator, obj.denominator);
     newObj.numerator = obj.numerator/common;
     newObj.denominator = obj.denominator/common;
     return newObj;
}

//displayFraction() function displays the Fraction object
//details
void displayFraction(Fraction obj)
{
     cout<<obj.wholeNum<<" ";
     if(obj.numerator!=0)
          cout<<obj.numerator<<"/"<<obj.denominator;
}

//add() function adds two fraction objects
//and returns the new Fraction object
Fraction add(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.denominator + obj2.numerator*obj1.denominator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;
}

//multiply() function multiplies two fraction objects
//and returns the new Fraction object
Fraction multiply(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.numerator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;
}

//subtract() function multiplies two fraction objects
//and returns the new Fraction object
Fraction subtract(Fraction obj1, Fraction obj2)
{
     Fraction obj3;
     obj3.numerator = obj1.numerator*obj2.denominator - obj2.numerator*obj1.denominator;
     obj3.denominator = obj1.denominator*obj2.denominator;
     obj3 = reduceFraction(obj3);
     return obj3;

}

//main function
int main()
{
     //Create three Fractional objects
     Fraction object1, object2, object3;

     //declare one char variables
     char arthiOperator;

     //read the fractional values into two Fraction
     //objects
     object1 = enterFractionValue();
     object2 = enterFractionValue();

     cout<<endl;

     //Prompt the user to enter his/her choice
     cout<<"Choose any one of the following operations: "<<endl;
     cout<<"+ - to add two fractions "<<endl;
     cout<<"- - to subtract two fractions "<<endl;
     cout<<"* - to multiply two fractions "<<endl;
     cout<<"Enter your operator to prefrom the operation: ";
     cin>>arthiOperator;
     cout<<endl;

     //depending on the operator call the respective operation
     //function and display the value
     //condition for if user chooses '+' operator
     if(arthiOperator=='+')
     {
          object3 = add(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" + ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;

     }

     //condition for if user chooses '-' operator
     else if(arthiOperator=='-')
     {
          object3 = subtract(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" - ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;

     }

     //condition for if user chooses '*' operator
     else if(arthiOperator=='*')
     {
          object3 = multiply(object1, object2);
          object1 = reduceFraction(object1);
          displayFraction(object1);
          cout<<" * ";
          object2 = reduceFraction(object2);
          displayFraction(object2);
          cout<<" = ";
          displayFraction(object3);
          cout<<endl;
     }

     //display the error message if the user does not choose
     //proper operator
     else
          cout<<"Sorry! Operation can not be performed by using "<<arthiOperator<<endl;

     //system("pause");
     return 0;
}

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