Question: I am writing a program that will add fractions. It works with four files, and I am only allowed to modify fraction.cpp. everything is working

I am writing a program that will add fractions. It works with four files, and I am only allowed to modify fraction.cpp. everything is working for me, but for some reason, every time I enter two factions, I get an error msg that says the denominator is zero. Can someone help me? Also the program is suposed to be ale to run until it reaces the end of the file. Like the user presses ctrl D. Can someone help me with this too with only modifiying fraction.cpp?

Thank you.

// // useFraction.cpp // // DO NOT MODIFY THIS FILE //

#include "fraction.h" #include using namespace std;

void print_fraction(const Fraction& f) { cout << "print_fraction: " << f.getNum() << "/" << f.getDem() << endl; }

int main() { Fraction x(2,3); Fraction y(6,-2);

cout << x << endl; cout << y << endl;

cin >> y; cout << y << endl; print_fraction(y); Fraction z = x + y; cout << x << " + " << y << " = " << z << endl; }

//fraction.h

#ifndef Fraction_h #define Fraction_h #include using namespace std; class Fraction { public: //Functions Fraction(); Fraction(int,int); int getNum() const; int getDem() const; void setNum(int num); void setDem(int den); void reduce(); void signs(); friend ostream& operator<<(ostream &out,const Fraction &); friend istream& operator>>(istream &,Fraction &); Fraction operator+(const Fraction ); Fraction operator-(const Fraction ); Fraction& operator=(const Fraction ); private: int nemer; int denom; }; #endif

//This is fraction.cpp

#include "fraction.h" #include #include #include using namespace std;

Fraction::Fraction() { setNum(0); setDem(1); }

Fraction::Fraction(int nem, int dem) { if (dem == 0) { throw invalid_argument("Error: denominator is zero"); } else { setNum(nem); setDem(dem); reduce(); }

} void Fraction::setNum(int num) { nemer = num; } void Fraction::setDem(int den) { denom = den; } int Fraction::getNum() const { return nemer; } int Fraction::getDem() const {

return denom; } void Fraction::reduce() { signs(); int Sign = 1; int nem = getNum(); int den = getDem(); if (nem < 0) { nem *= -1; Sign = -1; } for (int i = (nem * den); i > 1; i--) { if ((nem % i == 0) && (den % i == 0)) { nem /= i; den /= i; } } nem *= Sign; setNum(nem); setDem(den); } void Fraction::signs() { int nem = getNum(); int den = getDem(); if (den < 0) { nem *= -1; den *= -1; } setNum(nem); setDem(den); } Fraction &Fraction::operator=(const Fraction frac) { int num = frac.getNum(); int den = frac.getDem(); (*this).setNum(num); (*this).setDem(den); return *this; } istream &operator>>(istream &in, Fraction &frac) { int num; int den; in >> num; in >> den; if (den == 0) { throw invalid_argument("Error: denominator is zero"); exit(0); } frac.setNum(num); frac.setDem(den); frac.reduce(); return in; } ostream &operator<<(ostream& out, const Fraction& frac) { if (frac.getDem() == 1) out << frac.getNum(); else { out << frac.getNum() << "/" << frac.getDem() ;

} return out; } Fraction Fraction::operator+(const Fraction frac) { int Nsum = ((*this).getNum() * frac.getDem()) + (frac.getNum() * (*this).getDem()); int Dsum = ((*this).getDem() * frac.getDem()); Fraction frac2(Nsum, Dsum); frac2.reduce(); return frac2; }

Fraction Fraction::operator-(const Fraction frac) { int Nsum= ((*this).getNum() * frac.getDem()) - (frac.getNum() * (*this).getDem()); int Dsum = ((*this).getDem() * frac.getDem()); Fraction frac2(Nsum, Dsum ); frac2.reduce(); return frac2; }

// // calculator.cpp // // DO NOT MODIFY THIS FILE //

#include "fraction.h" #include #include using namespace std;

int main() { Fraction x,y; char op; try { cin >> x; cin >> op; while ( cin && ( op == '+' || op == '-' ) ) { cin >> y; if ( op == '+' ) x = x + y; else x = x - y; cin >> op; } cout << x << endl; } catch ( invalid_argument& e ) { cout << "Error: " << e.what() << endl; } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!