C++ Language, Microsoft Visual Studio 2015 4.6 (Rat ional Class) Create a class
ID: 3596432 • Letter: C
Question
C++ Language, Microsoft Visual Studio 2015 4.6 (Rat ional Class) Create a class called Rational for performing arithmetic with fractions Write a program to test your class. Use integer variables to represent the private data of the class- the numerator and the denominator. Provide a constructor that enables an object of this class to be initialized when it's declared. The constructor should contain default values in case no initializers are provided and should store the fraction in reduced form. For example, the fraction would be stored in the object as 1 in the numerator and 2 in the denominator. Provide public member functions that perform each of the following tasks: a) add-Adds two Rational numbers. The result should be stored in reduced form. b) subtract-Subtracts two Rational numbers. Store the result in reduced form. c) multiply-Multiplies two Rational numbers. Store the result in reduced form. d) e) divide-Divides two Rational numbers. The result should be stored in reduced form. toRationalString-Returns a string representation of a Rational number in the form a/b, where a is the numerator and b is the denominator. f) toDouble-Returns the Rational number as a double.
Explanation / Answer
//rationalNumber.h
class rationalNumber
{
private:
int numerator;
int denominator;
public:
rationalNumber(); //default constructor
rationalNumber(int num,int den); //argument constructor
rationalNumber normalize(); // normalization using GCD
//arithmetic operations using functions
rationalNumber add(rationalNumber r);
rationalNumber subtract(rationalNumber r);
rationalNumber multiply(rationalNumber r);
rationalNumber divide(rationalNumber r);
void toRationalString();
double toDouble();
};
#endif
//implementation file rational.cpp
#include <iostream>
using namespace std;
#include "RATIONALNUMBER.H"
rationalNumber::rationalNumber() //default constructor
{
numerator = 0;
denominator = 1;
}
rationalNumber::rationalNumber(int num,int den) //argument constructor
{
numerator=num;
denominator=den;
}
rationalNumber rationalNumber::normalize() // normalization using GCD
{
rationalNumber temp;
int x,y,z;
x=numerator;
y=denominator;
z=(x*x<y*y)?(z=x):(z=y);
for(int i=2;i*i<=z*z;i++)
{
while((x%i)==0 && (y%i)==0)
{
x=x/i;
y=y/i;
z=z/i;
}
}
if(y<0)
{
temp.numerator=-x;
temp.denominator=-y;
}
else
{
temp.numerator=x;
temp.denominator=y;
}
return temp;
}
//arithmetic operations using functions
rationalNumber rationalNumber::add(rationalNumber r)
{
rationalNumber temp;
temp.numerator=this->numerator*r.denominator+r.numerator*this->denominator;
temp.denominator= this->denominator*r.denominator;
return temp;
}
rationalNumber rationalNumber::subtract(rationalNumber r)
{
rationalNumber temp;
temp.numerator=this->numerator*r.denominator-r.numerator*this->denominator;
temp.denominator=this->denominator*r.denominator;
return temp;
}
rationalNumber rationalNumber::multiply(rationalNumber r)
{
rationalNumber temp;
temp.numerator=this->numerator*r.numerator;
temp.denominator=this->denominator*r.denominator;
return temp;
}
rationalNumber rationalNumber::divide(rationalNumber r)
{
rationalNumber temp;
temp.numerator=this->numerator*r.denominator;
temp.denominator=this->denominator*r.numerator;
return temp;
}
void rationalNumber::toRationalString()
{
cout<<numerator<<"/"<<denominator;
}
double rationalNumber::toDouble()
{
return (double)numerator/denominator;
}
int main() {
rationalNumber rn1(2,3);
rationalNumber rn2(3,5);
rationalNumber rn3;
int choice;
cout<<"Rational Number Operations";
cout<<" 1.Addition";
cout<<" 2.Subtraction";
cout<<" 3.Multiplication";
cout<<" 4.Division";
cout<<" Enter operation number";
cin>>choice;
cout<<" Result : ";
switch(choice)
{
case 1: rn3= rn1.add(rn2).normalize();
rn3.toRationalString();
break;
case 2:rn3=rn1.subtract(rn2).normalize();
rn3.toRationalString();
break;
case 3: rn3=rn1.multiply(rn2).normalize();
rn3.toRationalString();
break;
case 4: rn3=rn1.divide(rn2).normalize();
rn3.toRationalString();
break;
default:
cout<<"Enter valid choice of operation";
break;
}
cout<<" rn1 to double :"<<rn1.toDouble();
return 0;
}
Output:
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.