Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

4 . 1 2 LAB 3 : Classes ( Rational ) Rational Numbers It may come as a bit of a surprise when the C

4.12 LAB 3: Classes (Rational)
Rational Numbers
It may come as a bit of a surprise when the C++ floating-point types (float, double), fail to capture a particular value accurately. Certainly double, which is usually stored as a 64-bit value, is far better than the old float, which is only 32 bits, but problems do arise. For example:
float n =2.0;
float d =3.0;
cout << precision(17);
cout << n / d << endl;
produces 0.6666668653488159, which is accurate to only 8 decimal places - a bit dirty for a discipline that prides itself on precision!
A solution that is often used when precision is of greatest importance and all of the numbers involved are going to be "rational" (that is, expressible as a 'ratio' of two integers - i.e. a fraction) is to use a custom data type - i.e. a class - that implements fractions, or "rational numbers". This is what you will do in this lab assignment.
Class Specification
Write a C++ program that performs the rational number operations addition, subtraction, multiplication and division on two fractions. The program should be written in a single file. You will need to design a "rational number" class named Rational whose value will be a fraction (e.g.,1/128, or 22/7), with appropriate constructors and member functions. A fraction will be specified as a numerator and a denominator - e.g. the pair (8,109) represents the fraction 8/109. The member variables should be private and accessed using the accessor and mutator functions.
Constructors
Create 3 constructors:
a constructor with two parameters (numerator and denominator)
a constructor with one parameter (denominator set to 1)
a constructor with no parameters (0/1)
Accessor Functions
add
subtract
multiply
divide
display
Mutator Function
simplify
The following are a list of the rules of arithmetic for fractions:
(a/b)+(c/d)=(ad + bc)/(b*d)
(a/b)-(c/d)=(ad - bc)/(b*d)
(a/b)*(c/d)=(ac)/(bd)
(a/b)/(c/d)=(ad)/(cb)
Note that for this lab, when you perform an operation, you do not need to simplify the resulting fraction, i.e.,4/5*5/10=20/50. You should not simplify this to 2/5 at this point.
The display function should output the Rational object in the format:
n / d
#include
using namespace std;
// Rational Class declaration
class Rational {
private:
int numerator;
int denominator;
public:
Rational();
explicit Rational(int);
Rational(int, int);
Rational add(const Rational &) const;
Rational subtract(const Rational &) const;
Rational multiply(const Rational &) const;
Rational divide(const Rational &) const;
void simplify();
void display() const;
private:
int gcd(int, int) const;
};
// Implement Rational class member functions here
// Do not change any of the code below this line!!
Rational getRational();
void displayResult(const string &, const Rational &, const Rational&, const Rational&);
int main(){
Rational A, B, result;
char choice;
cout << "Enter Rational A:"<< endl;
A = getRational();
cout << endl;
cout << "Enter Rational B:"<< endl;
B = getRational();
cout << endl;
cout << "Enter Operation:" << endl
<<"a - Addition (A + B)"<< endl
<<"s - Subtraction (A - B)"<< endl
<<"m - Multiplication (A * B)"<< endl
<<"d - Division (A / B)"<< endl
<<"y - Simplify A"<< endl;
cin >> choice;
cout << endl;
if (choice =='a'){
result = A.add(B);
displayResult("+", A, B, result);
} else if (choice =='s'){
result = A.subtract(B);
displayResult("-", A, B, result);
} else if (choice =='m'){
result = A.multiply(B);
displayResult("*", A, B, result);
} else if (choice =='d'){
result = A.divide(B);
displayResult("/", A, B, result);
} else if (choice =='y'){
A.simplify();
A.display();
} else {
cout << "Unknown Operation";
}
cout << endl;
return 0;
}
Rational getRational(){
int choice;
int numer, denom;
cout << "Which Rational constructor? (Enter 2,1, or 0)"<< endl
<<"2-2 parameters (numerator & denominator)"<< endl
<<"1-1 parameter (numerator)"<< endl
<<"0-0 parameters (default)"<< endl;
cin >> choice;
cout << endl;
if (choice ==2){
cout << "numerator? ";
cin >> numer;
cout << endl;
cout << "denominator? ";
cin >> denom;
cout << endl;
return Rational(numer, denom);
} else if (choice ==1){
cout << "numerator? ";
cin >> numer;
cout << endl;
return Rational(numer);
} else {
return Rational();
}
}
void displayResult(const string &op, const Rational &lhs, const Rational&rhs, const Rational &result){
cout <<"(";
lhs.display();
cout <<")"<< op <<"(";
rhs.display

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Informix Database Administrators Survival Guide

Authors: Joe Lumbley

1st Edition

0131243144, 978-0131243149

More Books

Students also viewed these Databases questions

Question

1. What goals will be sought?

Answered: 1 week ago