Question: I am writing a program that will allow add fractions. For some reason it reads in two lines of code before outputing the answer. I

I am writing a program that will allow add fractions. For some reason it reads in two lines of code before outputing the answer. I need it to input a string of fractions like 1/2+1/2 +1/2 on the same line then, when the user presses enter, output the result. Can someone help me fix my program? I cannot modify calculator.cpp

Thank you.

//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::getDen() const { return denom; } void Fraction::reduce() { signs(); int Sign = 1; int nem = getNum(); int den = getDen(); 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 = getDen(); if (den < 0) { nem *= -1; den *= -1; } setNum(nem); setDem(den); } Fraction &Fraction::operator=(const Fraction frac) { int num = frac.getNum(); int den = frac.getDen(); (*this).setNum(num); (*this).setDem(den); return *this; } istream &operator>>(istream &in, Fraction &frac) { char Dum; int num; int den; in >> num; in >> Dum; in >> den; frac.setNum(num); frac.setDem(den); frac.reduce(); return in; } ostream &operator<<(ostream& out, const Fraction& frac) { if (frac.getDen() == 1) out << frac.getNum(); else { out << frac.getNum() << "/" << frac.getDen() ; } return out; } Fraction Fraction::operator+(const Fraction frac) { int Nsum = ((*this).getNum() * frac.getDen()) + (frac.getNum() * (*this).getDen()); int Dsum = ((*this).getDen() * frac.getDen()); Fraction frac2(Nsum, Dsum); frac2.reduce(); return frac2; } Fraction Fraction::operator-(const Fraction frac) { int Nsum= ((*this).getNum() * frac.getDen()) - (frac.getNum() * (*this).getDen()); int Dsum = ((*this).getDen() * frac.getDen()); Fraction frac2(Nsum, Dsum ); frac2.reduce(); return frac2; }

//fraction.h #ifndef Fraction_h #define Fraction_h #include using namespace std; class Fraction { public: //Functions Fraction(); Fraction(int,int); int getNum() const; int getDen() 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

// // 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.getDen() << 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; }

// // 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!