hello This program will convert to a rational class,plz I need to have a rationa
ID: 3644168 • Letter: H
Question
helloThis program will convert to a rational class,plz
I need to have a rational class.
THANKS
#include <iostream>
class fracType
{
public:
fracType(); // default constructor
void setFrac (int newNum,int newDen);
fracType Add (fracType otherFraction) const;
fracType Sub (fracType otherFraction) const;
fracType Mul (fracType otherFraction) const;
fracType Div (fracType otherFraction) const;
void simplify();
void showFrac() const;
void showDec() const;
private:
int numerator;
int denominator;
};
using namespace std;
int main()
{
bool exit=false;
do
{
int num;
int den;
fracType num1;
fracType num2;
fracType result;
int choice;
bool error;
do{
error=false;
cout << " What is the numerator of the first fraction? ";
if(!(cin >> num)) {
cout << "Please enter numeric characters only. " ;
cin.clear();
cin.ignore(10000,' ');
error=true;
}
}while(error);
do{
error=false;
cout << "What is the denominator of the first fraction? ";
if(!(cin >> den)) {
cout << "Please enter numeric characters only. " ;
cin.clear();
cin.ignore(10000,' ');
error=true;
}
}while(error);
num1.setFrac(num, den);
do{
error=false;
cout << " What is the numerator of the second fraction? ";
if(!(cin >> num)) {
cout << "Please enter numeric characters only. " ;
cin.clear();
cin.ignore(10000,' ');
error=true;
}
}while(error);
do{
error=false;
cout << "What is the denominator of the second fraction? ";
if(!(cin >> den)) {
cout << "Please enter numeric characters only. " ;
cin.clear();
cin.ignore(10000,' ');
error=true;
}
}while(error);
num2.setFrac(num, den);
cout << endl;
do{
error=false;
cout << "Enter a number from 1 to 5 "
<< "1. Displays the sum of the two fractions "
<< "2. Displays the difference "
<< "3. Displays the product "
<< "4. Displays the quotient "
<< "5. Exit "
<< " Selection is ";
if(!(cin >> choice)) {
cout << "Please enter numeric characters only. " ;
cin.clear();
cin.ignore(10000,' ');
error=true;
}
}while(error);
cout << endl;
exit=false;
switch (choice)
{
case 1:
cout << endl;
num1.showFrac();
cout << " + ";
num2.showFrac();
cout << " = ";
result = num1.Add(num2);
result.simplify();
result.showFrac();
result.showDec();
cout << endl;
break;
case 2:
num1.showFrac();
cout << " - ";
num2.showFrac();
cout << " = ";
result = num1.Sub(num2);
result.simplify();
result.showFrac();
result.showDec();
cout << endl;
break;
case 3:
num1.showFrac();
cout << " * ";
num2.showFrac();
cout << " = ";
result = num1.Mul(num2);
result.simplify();
result.showFrac();
result.showDec();
cout << endl;
break;
case 4:
num1.showFrac();
cout << " / ";
num2.showFrac();
cout << " = ";
result = num1.Div(num2);
result.simplify();
result.showFrac();
result.showDec();
cout << endl;
break;
case 5:
exit=true;
break;
default: cout << "Not an input between 1 and 7. ";
break;
}
}while (!exit);
system("pause");
}
void fracType::simplify() //Euclids algorithm
{ int a,b;
a=numerator;
b=denominator;
while(a!=b)
{if(a>b)
a -= b;
else
b -= a;
}
numerator/=a;
denominator/=a;
}
fracType::fracType()
{
numerator = 0;
denominator = 0;
}
void fracType::setFrac(int newNum, int newDen)
{
numerator = newNum;
denominator = newDen;
}
fracType fracType::Add(fracType otherFraction) const
{
fracType sum;
sum.numerator = numerator*otherFraction.denominator+otherFraction.numerator*denominator;
sum.denominator = denominator*otherFraction.denominator;
return sum;
}
fracType fracType::Sub(fracType otherFraction) const
{
fracType difference;
difference.numerator = numerator*otherFraction.denominator-otherFraction.numerator*denominator;
difference.denominator = denominator*otherFraction.denominator;
return difference;
}
fracType fracType::Mul(fracType otherFraction) const
{
fracType product;
product.numerator = numerator*otherFraction.numerator;
product.denominator = denominator*otherFraction.denominator;
return product;
}
fracType fracType::Div(fracType otherFraction) const
{
fracType quotient;
quotient.numerator = numerator*otherFraction.denominator;
quotient.denominator = denominator*otherFraction.numerator;
return quotient;
}
void fracType::showFrac() const
{ if(denominator>numerator)
cout << numerator << '/' << denominator;
else
if(numerator%denominator!=0)
cout<<numerator/denominator<<" "<<numerator%denominator<<"/"<<denominator;
else
cout<<numerator/denominator;
}
void fracType::showDec() const
{cout<<" = "<<numerator/(double)denominator;
}
Explanation / Answer
// Rational class definition.
import java.text.DecimalFormat;
public class Rational {
private int numerator, denominator;
// no-argument constructor
public Rational()
{
numerator = 1;
denominator = 1;
}
// initialize numerator part to n and denominator part to d
public Rational( int theNumerator, int theDenominator )
{
numerator = theNumerator;
denominator = theDenominator;
reduce();
}
// add two Rational numbers
public Rational sum( Rational right )
{
int resultDenominator = denominator * right.denominator;
int resultNumerator = numerator * right.denominator +
right.numerator * denominator;
return new Rational( resultNumerator, resultDenominator );
}
// subtract two Rational numbers
public Rational subtract( Rational right )
{
int resultDenominator = denominator * right.denominator;
int resultNumerator = numerator * right.denominator -
right.numerator * denominator;
return new Rational( resultNumerator, resultDenominator );
}
// multiply two Rational numbers
public Rational multiply( Rational right )
{
return new Rational( numerator * right.numerator,
denominator * right.denominator );
}
// divide two Rational numbers
public Rational divide( Rational right )
{
return new Rational( numerator * right.denominator,
denominator * right.numerator );
}
// reduce the fraction
private void reduce()
{
int gcd = 0;
int smaller;
if ( numerator < denominator )
smaller = numerator;
else
smaller = denominator;
for ( int divisor = smaller; divisor >= 2; divisor-- ) {
if ( numerator % divisor == 0 && denominator % divisor == 0 ) {
gcd = divisor;
break;
}
}
if ( gcd != 0 ) {
numerator /= gcd;
denominator /= gcd;
}
}
// return String representation of a Rational number
public String toRationalString()
{
return numerator + "/" + denominator;
}
// return floating-point String representation of
// a Rational number
public String toFloatString( int digits )
{
String format = "0.";
// get format string
for ( int i = 0; i < digits; i++ )
format += "0";
DecimalFormat twoDigits = new DecimalFormat( format );
return twoDigits.format(
( double )numerator / denominator ).toString();
}
} // end class Rational
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.