Hello,

i have been working on this for a while now. The program works

but i am getting the wrong output. I know it is something wrong

with the Reduce function in Fraction.h because i did a

system("pause") right before I called the Reduce function and the

answer was still ok.

I would greatly appreciate it if someone could look at it and let me know what' s wrong.

---Thank you, bruce

This is the .cpp file

Code:#include<iostream.h> #include"Fraction.h" const int MAX = 7; //-------------------------------------------------------------------------------- // gets the fractions from user int main() { char ans; do { Fraction input[MAX]; cout << "Enter 7 fractions and press Enter after each one: " << endl; for (int i = 0; i < MAX; i++) { input[i].Get(); } cout << endl << endl; //-------------------------------------------------------------------------------- //calculates sum and displayes the reduced sum Fraction sum; for (int i = 0; i < MAX; i++) { sum = sum+ input[i]; } sum = sum.Reduce(sum); cout << "The sum of those seven fractions is "; sum.Show(); //----------------------------------------------------------------------------------- //calculates product and displayes the reduced product Fraction product(1,1); for (int i = 0; i < MAX; i++) { product = product* input[i]; } product = product.Reduce(product); cout << "The product of those seven fractions is "; product.Show(); //-------------------------------------------------------------------------------------- //increments product by 1, then displays cout << "The product added by 1 equals "; product = product.Increment(product); product.Show(); //----------------------------------------------------------------------------------- //decrements sum by 1, then displays cout << "The sum subtracted by 1 equals "; sum = sum.Decrement(sum); sum.Show(); cout << endl; cout << "Would you like to enter another set of fractions? y or n? " << endl; cin >> ans; cout << endl << endl; }while(ans == 'y' || ans == 'Y'); return 0; }

This is the .h file:

Code:class Fraction { friend Fraction operator + (Fraction, Fraction); friend Fraction operator * (Fraction, Fraction); public: Fraction(int n, int d = 1); //constructor Fraction(); //Set numerator = 0, denominator = 1 void Get(); //Get a fraction from keyboard void Show(); //Display a fraction on screen double Evaluate(); //Return the decimal value of a fraction Fraction Increment(Fraction r); Fraction Decrement(Fraction r); Fraction Reduce(Fraction r); private: int numerator; int denominator; }; Fraction operator + (Fraction f1, Fraction f2) { Fraction r; //the return value of f1 + f2 //compute numerator r.numerator = (f1.numerator * f2.denominator) + (f2.numerator * f1.denominator); //compute denominator r.denominator = f1.denominator * f2.denominator; return r; } Fraction operator * (Fraction f1, Fraction f2) { Fraction r; r.numerator = (f1.numerator * f2.numerator); r.denominator = (f1.denominator * f2.denominator); return r; } Fraction::Fraction(int n, int d) { numerator = n; denominator = d; } Fraction::Fraction() { numerator = 0; denominator = 1; } void Fraction::Get() { char div_sign; //consumes '/' character cin >> numerator >> div_sign >> denominator; } void Fraction::Show() { cout << numerator << '/' << denominator << endl; } double Fraction::Evaluate() { double n = numerator; //convert numerator to float double d = denominator; //convert denominator to float return (n / d); //return float representation } Fraction Fraction::Increment(Fraction r) { r.numerator = r.numerator + r.denominator; return r; } Fraction Fraction::Decrement(Fraction r) { r.numerator = r.numerator - r.denominator; return r; } Fraction Fraction::Reduce(Fraction r) { int remainder; if (r.denominator > r.numerator) { remainder = r.denominator % r.numerator; if (remainder != 0) { r.denominator = r.denominator / remainder; r.numerator = r.numerator / remainder; return r; } else if (remainder == 0) { r.denominator = r.denominator / r.numerator; r.numerator = r.numerator / r.numerator; return r; } } if (r.numerator > r.denominator) { remainder = r.numerator % r.denominator; if (remainder != 0) { r.numerator = r.numerator / remainder; r.denominator = r.denominator / remainder; return r; } else if (remainder == 0) { r = r.numerator / r.denominator; return r; } } }