Reducing Fractions

Program is supposed to be able to add, subtract, multiply, and divide fractions. Everything works well but now I am trying to get the program to reduce the fractions. This is what I have so far..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// File: fractions.cpp
// Date: 7/3/2012
// Description:
//   Implement fraction methods.

#include "fractions.h"
void reduce_fraction (int &numerator, int &denominator)
{
        for (int i = denominator * numerator; i > 1; i--) {  
                if ((denominator % i == 0) && (numerator % i == 0)) {  
            denominator /= i;  
                numerator /= i;  
        }  
                  
         }
}

void add_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_denominator
		+ second_numerator * first_denominator;
	output_denominator = first_denominator * second_denominator;
		
}

void subtract_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_denominator
		- second_numerator * first_denominator;
	output_denominator = first_denominator * second_denominator;
}

void multiply_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_numerator;
	output_denominator = first_denominator * second_denominator;
}

void divide_fractions(int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	multiply_fractions(first_numerator, first_denominator,
	    second_denominator, second_numerator,
		output_numerator, output_denominator);
}


and I have came up with this..
1
2
3
4
5
6
7
8
9
10
void reduce_fraction (int &numerator, int &denominator)
{
        for (int i = denominator * numerator; i > 1; i--) {  
                if ((denominator % i == 0) && (numerator % i == 0)) {  
            denominator /= i;  
                numerator /= i;  
        }  
                  
         }
}

but I do not know where to put it in my previous code or if it is even right. Any suggestions? Thank you!
You need to find the highest or greatest common factor. Have you looked up an algorithm?
Last edited on
I have not. And I am not 100% clear on how to find the greatest common factor. Am I going in the right direction with what I have so far? Thank you for your time!
The common factor can't be larger than the minimum of the numerator or denominator. You need to stop once you've found the first common denominator and stop looking for smaller ones.
I am still a little confused. Do I even need my void reduce_fraction function? I feel like I am missing something so simple but for whatever reason I cannot figure it out. Again, thank you for your time. I appreciate the lead if nothing else.
Got it to work, kbw. This is the route I went. Thanks again for your help.
// File: fractions.cpp
// Date: 7/3/2012
// Description:
// Implement fraction methods.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "fractions.h"
void reduce_fraction (int &numerator, int &denominator)
{
        for (int i = denominator * numerator; i > 1; i--) {  
                if ((denominator % i == 0) && (numerator % i == 0)) {  
            denominator /= i;  
                numerator /= i;  
        }  
                  
         }
}

void add_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_denominator
		+ second_numerator * first_denominator;
	output_denominator = first_denominator * second_denominator;
	reduce_fraction(output_numerator, output_denominator);
		
}

void subtract_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_denominator
		- second_numerator * first_denominator;
	output_denominator = first_denominator * second_denominator;
	reduce_fraction(output_numerator, output_denominator);
}

void multiply_fractions (int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	output_numerator = first_numerator * second_numerator;
	output_denominator = first_denominator * second_denominator;
	reduce_fraction(output_numerator, output_denominator);
}

void divide_fractions(int first_numerator, int first_denominator,
	int second_numerator, int second_denominator,
	int &output_numerator, int &output_denominator)
{
	multiply_fractions(first_numerator, first_denominator,
	    second_denominator, second_numerator,
		output_numerator, output_denominator);
}

Topic archived. No new replies allowed.