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;
		}
	}	
}