Reducing Fractions

Jul 5, 2012 at 11:08pm
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!
Jul 5, 2012 at 11:21pm
You need to find the highest or greatest common factor. Have you looked up an algorithm?
Last edited on Jul 5, 2012 at 11:22pm
Jul 5, 2012 at 11:45pm
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!
Jul 6, 2012 at 12:01am
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.
Jul 6, 2012 at 1:58am
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.
Jul 6, 2012 at 3:50am
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.