Simplyfing Fractions

I have to make a function in a program that will reduce a fraction if it can be reduced. I attempted it but it didn't work.

Here is the code

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <string>

int Add(int Numerator, int Denominator, int Numerator1, int Denominator1, int Total, int DTotal);
int Minus(int, int, int, int, int, int);
int Multiply(int, int, int, int, int, int);
int Divide(int, int, int, int, int, int);
struct Fraction {
    int Numerator;
    int Denominator;
};
struct Fraction simplify (struct Fraction f);

using namespace std;
int main()
{
    int Numerator = 0;
    int Denominator = 0;
    int Numerator1 = 0;
    int Denominator1 = 0;
    int Total = 0;
    int DTotal = 0;
    string Operation = "";
    struct Fraction f;
    struct Fraction gcm;
   
    cout << "Enter the numertor for the first fraction: ";
    cin >> Numerator;
    cout << "Enter the denominator for the first fraction: ";
    cin >> Denominator;
    cout << "Enter the numertor for the second fraction: ";
    cin >> Numerator1;
    cout << "Enter the denominator for the second fraction: ";
    cin >> Denominator1;
    cout << "Enter an operation (Add, Minus, Divide, or Multiply): ";
    cin >> Operation;
    transform(Operation.begin(), Operation.end(), Operation.begin(), :: tolower);
   
    if(Operation == "add")
    {
                 Add(Numerator, Denominator, Numerator1, Denominator1, Total, DTotal);
                 gcm = simplify(f);
    }
    
     if(Operation == "minus")
     {
                  Minus(Numerator, Denominator, Numerator1, Denominator1, Total, DTotal);
                  gcm = simplify(f);
     }
     
     if(Operation == "multiply")
     {
                  Multiply(Numerator, Denominator, Numerator1, Denominator1, Total, DTotal);
                  gcm = simplify(f);
     }
 
     if(Operation == "divide")
     {
                  Divide(Numerator, Denominator, Numerator1, Denominator1, Total, DTotal);
                  gcm = simplify(f);
     }
 
                 
     system("Pause");
     return 0;
}
//FUNCTION DEFINITION
int Add(int Numerator, int Denominator, int Numerator1, int Denominator1, int Total, int DTotal)
{
       if(Denominator == Denominator1)
       {
                  Total = Numerator + Numerator1;
                  cout << Total << "/" << Denominator << endl;

       }
       else
       {
                  DTotal = Denominator * Denominator1;
                  Total = Numerator + Numerator1;
                  cout << Total << "/" << DTotal << endl;
       }
}    
int Minus(int Numerator, int Denominator, int Numerator1, int Denominator1, int Total, int DTotal)
{
       if(Denominator == Denominator1)
       {
                      Total = Numerator - Numerator1;
                      cout << Total << "/" << Denominator << endl;
                      }
       else
       {
                      DTotal = Denominator * Denominator1;
                      Total = Numerator - Numerator1;
                      cout << Total << "/" << DTotal << endl;
       }
}
int Multiply(int Numerator, int Denominator, int Numerator1, int Denominator1, int Total, int DTotal)
{
       if(Denominator == Denominator1)
       {
                      Total = Numerator * Numerator1;
                      cout << Total << "/" << Denominator << endl;
       }
       else
       {
                      DTotal = Denominator * Denominator1;
                      Numerator = Numerator * (DTotal / Denominator1);
                      Numerator1 = Numerator1 * (DTotal / Denominator);
                      Total = Numerator * Numerator1;
                      cout << Total << "/" << DTotal << endl;
       }
}                  
int Divide(int Numerator, int Denominator, int Numerator1, int Denominator1, int Total, int DTotal)
{
       if(Denominator == Denominator1)
       {
                      Total = Numerator * Denominator1;
                      DTotal = Numerator1 * Denominator;             
                      cout << Total << "/" << DTotal << endl;
                      }
       else
       {
                      DTotal = Denominator * Denominator1;
                      Total = Numerator * Denominator1;
                      DTotal = Numerator1 * Denominator;
                      cout << Total << "/" << DTotal << endl;
       }
}
struct Fraction simplify (struct Fraction f)
{
   int k = 0;
   int i = 0;
   int Numerator = 0;
   int Denominator = 0;
   int Total = 0;
   int DTotal = 0;

   if(Numerator < Denominator)
        k = Denominator;
   else
        k = Numerator;

   for (i = k; i > 0; i--)
   {
        if(Numerator % i == 0 && Denominator % i == 0){
                Total = Numerator / i;
                DTotal = Denominator / i;
                cout << Total << "/" << DTotal << endl;
        }
   }
   return f;
}
Last edited on
You never initialize the values for the fractions. You get the numerators and denominators, but you never give those values over to your fraction class.

Edit: Indeed, your fraction class HAS no way to set the values of int Numerator, Denominator, Numerator1, Denominator1 on line 7

Edit2: You never call any methods from your Fractions class, except for Fractions::Total() and Fractions::DTotal(), which are rather moot, as they do not simplify the fraction.

Edit3: My suggestion is largely back to the drawing board, and take a more object orientated approach. Right now you have more of a procedurally driven approach. Your Fractions class should end looking like:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Fractions
{
      private:
              int Numerator, Denominator;
      public:
            Fractions(int Numerator, int Denominator){this.Numerator=Numerator; this.Denominator = Denominator;};
            int numerator(){return Numerator;}; //'Getters' so you can use the value of the numerator and denominators
            int denominator(){return Denominator;};
              void add(Fractions){};
              void minus(Fractions){};
              void multiply(Fractions);
              void divide(Fractions){};
              void Simplify(){};
};

I'll also show you how the multiply should end up looking like:
1
2
3
4
5
6
void Fractions::multiply(Fractions fraction)
{
       Denominator *= fraction.denominator();
       Numerator *= fraction.numerator();
       Simplify(); //This should be a method to evaluate if the resulting fraction can be simplified, and then do it
}


I hope this sets you in the right direction, now you need to fill out the other methods, including add, subtract, divide, and simplify. You will also need to actually call these methods in main().
Last edited on
Sorry about that, I put in my other fractions class program. Edited with the real program.
Topic archived. No new replies allowed.