Skip to content

Instantly share code, notes, and snippets.

@0x000000AC
Last active December 16, 2015 11:39
Show Gist options
  • Save 0x000000AC/5429238 to your computer and use it in GitHub Desktop.
Save 0x000000AC/5429238 to your computer and use it in GitHub Desktop.
Arithmetic Operations on Factions
#include <iostream>
using namespace std;
enum MenuSelectionEnum
{
MENU_NONE = 0,
MENU_ADD = 1,
MENU_SUBTRACT = 2,
MENU_MULTIPLY = 3,
MENU_DIVIDE = 4,
MENU_QUIT = 5,
MENU_END = 6
};
int menu();
void addFractions(int num1, int num2, int den1, int den2, int&resultNum, int&resultDen);
void subtractFractions(int num1, int num2, int den1, int den2, int&resultNum, int&resultDen);
void multiplyFractions(int num1, int num2, int den1, int den2, int&resultNum, int&resultDen);
void divideFractions(int num1, int num2, int den1, int den2, int&resultNum, int&resultDen);
void outputResults(int num1, int num2, int den1, int den2, int resultNum, int resultDen, int operation);
void inputFractionValuesFromUser(int &num1, int &num2, int &den1, int &den2);
void reduceFraction(int &resultNum, int &resultDen);
void main()
{
int menuSelect = MENU_NONE;
int num1 = 0, num2 = 0, den1 = 0, den2 = 0;
int resultNum = 0, resultDen = 0;
menuSelect = menu();
inputFractionValuesFromUser(num1, num2, den1, den2);
if (menuSelect == MENU_ADD)
{
addFractions(num1, num2, den1, den2, resultNum, resultDen);
}
if (menuSelect == MENU_SUBTRACT)
{
subtractFractions(num1, num2, den1, den2, resultNum, resultDen);
}
if (menuSelect == MENU_MULTIPLY)
{
multiplyFractions(num1, num2, den1, den2, resultNum, resultDen);
}
if (menuSelect == MENU_DIVIDE)
{
divideFractions(num1, num2, den1, den2, resultNum, resultDen);
}
outputResults(num1, num2, den1, den2, resultNum, resultDen, menuSelect);
system("PAUSE");
} // end main
int menu()
{
int menuItemSelect = 0;
do
{
cout << "Fraction Calculator" << endl;
cout << "1. Add Fractions " << endl;
cout << "2. Subtract Fractions " << endl;
cout << "3. Multiply Fractions " << endl;
cout << "4. Divide Fractions " << endl;
cout << "5. Quit" << endl;
cout << "Please make a selection: " << endl;
cin >> menuItemSelect;
if(menuItemSelect <= MENU_NONE || menuItemSelect >= MENU_END)
cout << "Invalid selection! " << endl;
}
while(menuItemSelect <= MENU_NONE || menuItemSelect >= MENU_END);
return menuItemSelect;
}
// first four for input, second two for output
void addFractions( int num1, int num2, int den1, int den2, int &resultNum, int &resultDen)
{
// not using sturctures because I don't know them -- no local values because
// the outside world wouldn't know & symbols pass by value for resultNum and resultDen
resultNum = (num1 * den2) + (num2 * den1);
resultDen = den1 * den2;
}
void subtractFractions( int num1, int num2, int den1, int den2, int&resultNum, int &resultDen)
{
resultNum = (num1 * den2) - (num2 * den1);
resultDen = den1 * den2;
}
void multiplyFractions(int num1, int num2, int den1, int den2, int &resultNum, int &resultDen)
{
resultNum = num1 * num2;
resultDen = den1 * den2;
}
void divideFractions(int num1, int num2, int den1, int den2, int &resultNum, int &resultDen)
{
resultNum = num1 * den2;
resultDen = den1 * num2;
}
void outputResults(int num1, int num2, int den1, int den2, int resultNum, int resultDen, int operation)
{
// could all be switch here!!
if(operation == MENU_ADD)
{
reduceFraction(resultNum, resultDen);
cout << num1 << '/' << den1 << " + " << num2 << '/' << den2 << " = " << resultNum << '/' << resultDen << endl;
}
if(operation == MENU_SUBTRACT)
{
reduceFraction(resultNum, resultDen);
cout << num1 << '/' << den1 << " - " << num2 << '/' << den2 << " = " << resultNum << '/' << resultDen << endl;
}
if(operation == MENU_MULTIPLY)
{
reduceFraction(resultNum, resultDen);
cout << num1 << '/' << den1 << " * " << num2 << '/' << den2 << " = " << resultNum << '/' << resultDen << endl;
}
if(operation == MENU_DIVIDE)
{
reduceFraction(resultNum, resultDen);
cout << num1 << '/' << den1 << " / " << num2 << '/' << den2 << " = " << resultNum << '/' << resultDen << endl;
}
}
void inputFractionValuesFromUser(int &num1, int&num2, int &den1, int &den2)
{
cout << endl;
cout << "Please enter first fraction numerator: ";
cin >> num1;
cout << "Please enter first fraction denominator: ";
cin >> den1;
cout << endl;
cout << "Please enter second fraction numerator: ";
cin >> num2;
cout << "Please enter second fraction denominator: ";
cin >> den2;
}
void reduceFraction(int &resultNum, int &resultDen)
{
for (int i = resultDen * resultNum; i > 1; i--)
{
if ((resultDen % i == 0) && (resultNum % i == 0))
{
resultDen /= i;
resultNum /= i;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment