Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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 #include "myFraction.h"

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 #include "myFraction.h"

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

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

Database Concepts

Authors: David Kroenke, David Auer, Scott Vandenberg, Robert Yoder

8th Edition

013460153X, 978-0134601533

More Books

Students also viewed these Databases questions

Question

=+country competitive advantages? Why? Support your point of view.

Answered: 1 week ago