I'm trying to write a fraction class and I want a function to reduce the fraction to lowest terms. The problem I'm having is trying to get the fractions to reduce. I need a way to find a common factor in both numbers. All other functions work the way I want them to.

``````class Fraction{
private:
int numerator;
int denominator;
public:
Fraction(){
}

void setNumerator(int numerator){
this->numerator=numerator;
}
void setDenominator(int denominator){
this->denominator=denominator;
}

int getNumerator(){
return numerator;
}

int getDenominator(){
return denominator;
}

int reduce(){
if(denominator%numerator==0){
return denominator/numerator;
}
else{
return 0;
}
}
};``````

## Recommended Answers

You need to find the factors of each number.

This is also helpful.

I know how to find factors of a number, I just need to figure out how to do it in a C++ function.

Yes you do. Or are you expecting us to do it for you?

You have to show us an attempt, then we can help you fix …

## All 7 Replies

You need to find the factors of each number.

This is also helpful.

You need to find the factors of each number.

This is also helpful.

I know how to find factors of a number, I just need to figure out how to do it in a C++ function.

I know how to find factors of a number, I just need to figure out how to do it in a C++ function.

Yes you do. Or are you expecting us to do it for you?

You have to show us an attempt, then we can help you fix it if it doesn't work properly.

``````#include "iostream.h"
#include "Fraction1.h"
#include <cmath>

class CFraction
{
private:
int numerator;
int denominator;
public:
void Input();
void Output();
void Reduce();
int CheckFration();

CFraction()
{
numerator = 0;
denominator = 1;
}

virtual ~CFraction();

};

int CFraction::CheckFration()
{
if(denominator != 0)
return 1;
return 0;
}

void CFraction::Reduce()
{
int a = abs(numerator);
int b = abs(denominator);

while(a * b != 0)
{
if(a > b)
a = a - b;
else
b = b - a;

}
numerator = numerator / (a+b);
denominator = denominator / (a+b);

}

void CFraction::Input()
{
cout << "Input the numerator: ";
cin >> numerator;
do
{
cout << "Input the denominator: ";
cin >> denominator;
}while(CheckFration() == 0);
}
void CFraction::Output()
{
Reduce();
cout << "\nThe Fraction: " << numerator << "/" << denominator << endl << endl;
}

int main()
{
CFraction f;
f.Input();
f.Output();
return 0;
}``````

I don't know what your reduce is attempting to do, but it doesn't even attempt to get factors -- unless I don't understand the algorithm you're using.

Write down (don't code) the process you use to reduce a number into it's factors, in minute detail. When you get it into it's most basic steps, turn it into code at that time. I'd recommend turning the factoring into a function and have it return all the factors (array) of one number.

I find the greatest common divisor of numerator and denominator.

I find the greatest common divisor of numerator and denominator.

You are right; there is no need to find individual factors at all. Just find the gcd and divide both the numerator and denominator by it.

This is slightly faster:

``````inline unsigned int gcd( unsigned int a, unsigned int b ) // Euclid
{ return b==0 ? a : gcd( b, a%b ) ; }``````
Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.21 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.