Question
I need help refining my code. Currently I have few absent, incomplete or diverging function descriptions, preconditions, and/or postconditions //myFraction.h #ifndef H_FRACTION #define H_FRACTION #include
I need help refining my code. Currently I have few absent, incomplete or diverging function descriptions, preconditions, and/or postconditions
//myFraction.h
#ifndef H_FRACTION #define H_FRACTION
#include
using namespace std;
class fractionType {
// operator overload friend istream & operator >> (istream & in, fractionType & this_fraction);
public:
//counstructors fractionType(int n, int d = 1);
//default constructors fractionType();
//functions friend ostream & operator<< (ostream & out, fractionType & this_fraction);
fractionType operator+ (fractionType const &f2) const; fractionType operator* (fractionType const &f2) const; fractionType operator- (fractionType const &f2) const; fractionType operator/ (fractionType const &f2) const;
bool operator==(const fractionType& lhs) const; bool operator!=(const fractionType& lhs) const;
//Overloading operators bool operator< (const fractionType &f2) const; bool operator<= (const fractionType &f2) const; bool operator> (const fractionType &f2) const;
double Evaluate(); void Reduce();
private: int numerator; int denominator; };
#endif
*****************************************************************
//myFraction.h
#include
using namespace std;
// constructor fractionType::fractionType(int n, int d){ numerator = n; if (d != 0) { denominator = d; } else { denominator = 1; } Reduce(); }
// defaults constructor fractionType::fractionType() { numerator = 0; denominator = 1; }
istream & operator>>(istream & in, fractionType & this_fraction) { char divSign; // used to consume the '/' character during input in >> this_fraction.numerator >> divSign >> this_fraction.denominator; this_fraction.Reduce(); return in; }
// Display ostream & operator<<(ostream & out, fractionType & f){ if (f.denominator == 1) { out << f.numerator; } else { out << f.numerator << " " << '/' << " " << f.denominator; } return out; }
bool fractionType::operator< (const fractionType &f2) const{ return (f2 - *this).Evaluate() > 0; } bool fractionType::operator<= (const fractionType &f2) const{ return (f2 - *this).Evaluate() >= 0; } bool fractionType::operator> (const fractionType &f2) const{ return (f2 - *this).Evaluate() < 0; }
// Evaluate returns the decimal equivalent of the fraction double fractionType::Evaluate() { double n = numerator; // convert numerator to double double d = denominator; // convert denominator to double return (n / d); // compute and return double representation }
// This function reduces a fraction to its lowest terms. void fractionType::Reduce() { int n = numerator < 0 ? -numerator : numerator; int d = denominator; int largest = n > d ? n : d; int gcd = 0; // greatest common divisor for (int loop = largest; loop >= 2; loop--) if (numerator % loop == 0 && denominator % loop == 0) { gcd = loop; break; } if (gcd != 0) { numerator /= gcd; denominator /= gcd; } }
// Overload of operators fractionType fractionType::operator+ (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator) + (f2.numerator * this->denominator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }
fractionType fractionType::operator* (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.numerator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }
fractionType fractionType::operator- (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator) - (f2.numerator * this->denominator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }
fractionType fractionType::operator/ (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator); r.denominator = this->denominator * f2.numerator; r.Reduce(); return r; }
bool fractionType::operator==(const fractionType& l) const{ return (l.numerator == numerator) && (l.denominator == denominator); } bool fractionType::operator!=(const fractionType& l) const{ return !((*this) == l); } *****************************************************************
//main
#include
using namespace std;
int main() { fractionType start(3, 5), userFraction; cout << "A program to test the functionality of the class" << start << endl;
cout << "Enter fraction: "; cin >> userFraction;
cout << userFraction << endl;
fractionType add = start + userFraction; cout << add << endl; fractionType sub = start - userFraction; cout << sub << endl;
cout << (start > userFraction) << endl; cout << (start <= userFraction) << endl; cout << (start < userFraction) << endl;
cout << (start != userFraction) << endl; return 0;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started