Today, I created a program that adds two fractions together, and then reduces them. This took me about 2 hours to complete, and about 25 minutes to write. Yep, that means I sat there and debugged the program for over an hour and a half. Sheesh, I hope this isn’t what programming is always like ;)

The way this program works, is I set up the main function to call all of the other functions. However, in function Addition, I call the reduce function. This is because I needed to pass on the data from the addition function directly into the reduce function. If I were to call the reduce fraction from within the main function, the private data of function addition wouldn’t have been passed onto being reduced. Here is my code:

#include

void InputData (int &Num,int &Denom,int &Num2,int &Denom2)

{

//This function takes data from the user.

cout << "Enter the numerator of the first fraction." << '\n';

cin >> Num;

cout << "Enter the denominator of the first fraction." << '\n';

cin >> Denom;

cout << "Enter the numerator of the second fraction." << '\n';

cin >> Num2;

cout << "Enter the denominator of the second fraction." << '\n';

cin >> Denom2;

cout << '\n';

}

void Reduce (int &Num,int &Denom,int &Num2,int &Denom2)

{

//This function reduces both fractions, before adding them.

int a, b, c, d, i, j = 0;

a = Num;

b = Denom;

c = Num2;

d = Denom2;

for (i = a * b; i > 1; i–)

{

if ((a % i == 0) && (b % i == 0))

{

a /= i;

b /= i;

}

}

for (j = c * d; j > 1; j–)

{

if ((c % j == 0) && (d % j == 0))

{

c /= j;

d /= j;

}

}

Num = a;

Denom = b;

Num2 = c;

Denom2 = d;

}

void Reduce (int &Num,int &Denom)

{

//This function reduces the added fractions.

int a = 0;

int b = 0;

int i = 0;

a = Num;

b = Denom;

for (i = a * b; i > 1; i–)

{

if ((a % i == 0) && (b % i == 0))

{

a /= i;

b /= i;

}

}

Num = a;

Denom = b;

}

void Addition (int &Num,int &Denom,int &Num2,int &Denom2)

{

//This adds both of the raw fractions. In order to do this, you need to make sure both the numerator and denominator are equal.

if (Denom != Denom2)

{

Num = Num * Denom2;

Num2 = Num2 * Denom;

Denom = Denom * Denom2;

Denom2 = Denom2 * Denom;

Num = Num + Num2;

}

else

{

Num = Num + Num2;

}

Reduce (Num, Denom);

}

void OutputData (int &Num,int &Denom)

{

//This function simply displays the final fraction.

cout << Num << "/" << Denom << '\n';

}

int main ()

{

//This is the main loop, it will keep firing as long as char a is equal to y or Y.

char a;

do{

int Num, Denom, Num2, Denom2 = 0;

InputData (Num, Denom, Num2, Denom2);

Reduce (Num, Denom, Num2, Denom2);

Addition (Num, Denom, Num2, Denom2);

OutputData (Num, Denom);

cout << "Would you like to add two more fractions (y/n)?" << '\n';

cin >> a;

}while ((a == ‘y’) || (a == ‘Y’));

return 0;

}

And there she is! The program should work without the & symbol in the functions’ parameters, my reference code used it, so so did I :)

While creating this program, I used this source as a reference, although, I made sure to only look at it when I completely forgot how to do something, and throughout when I was debugging. Here is the link to my reference source code: http://cplusplus.com/files/fraction.zip

Speaking of that bug, take a look at what I had wrong! Look up in my source code, you see that red code? That is what I had mixed up, here is what I had when my code was bugged:

Here’s an interesting read I’ll hopefully finish up before the end of tonight! It’s about game engines. I doubt I’ll actually put any of this into practice any time soon, but it’s nice to read things like this: http://www.gamasutra.com/view/feature/4199/book_excerpt_game_engine_.php