rendered paste body#include <iostream.h>
#include <math.h>
void reduce(int &num, int &den){
int least, gcf, rednum, redden;
int i;
if(num >= den)
least = num;
else
least = den;
for(i = 1; i <= least; i++){
if((num % i == 0) && (den % i == 0))
gcf = i;
}
rednum = num / gcf;
redden = den / gcf;
num = rednum;
den = redden;
}
void expand(int &num, int den, int &whole){
whole = num / den;
num = num % den;
}
void frac_input(int &num1, int &den1, int &num2, int &den2, char &oper){
char trash;
bool valid;
do{
valid = true;
cout << "::> ";
cin >>num1>>trash>>den1>>oper>>num2>>trash>>den2;
if(den1 == 0 || den2 == 0){
valid = false;
cout << "Denominator is zero. please retry." << endl;
}
if(oper != '*' && oper != '/' && oper != '+' && oper != '-' && oper != 'x'){
valid = false;
cout << "Invalid operator. please retry. " << endl;
}
} while (valid == false);
}
void multiply_frac(int num1, int den1, int num2, int den2, int &ansnum, int &ansden){
ansnum = num1 * num2;
ansden = den1 * den2;
}
void divide_frac(int num1, int den1, int num2, int den2, int &ansnum, int &ansden){
ansnum = num1 * den2;
ansden = den1 * num2;
}
void add_frac(int num1, int den1, int num2, int den2, int &ansnum, int &ansden){
if(den1 != den2){
num1 = num1 * den2;
num2 = num2 * den1;
ansden = den1 * den2;
}
else
ansden = den1;
ansnum = num1 + num2;
}
void subtract_frac(int num1, int den1, int num2, int den2, int &ansnum, int &ansden){
if(den1 != den2){
num1 = num1 * den2;
num2 = num2 * den1;
ansden = den1 * den2;
}
else
ansden = den1;
ansnum = num1 - num2;
}
void output(int num1, int den1, int num2, int den2, int ansnum, int ansden, int whole, char oper){
cout << num1 << "/" << den1
<< " " << oper << " "
<< num2 << "/" << den2
<< " = ";
if(whole != 0 && ansnum == 0)
cout << whole;
else if(ansnum != 0 && whole != 0)
cout << whole << " & " << abs(ansnum) << "/" << ansden;
else if(ansnum != 0 && whole == 0)
cout << ansnum << "/" << ansden;
else if(ansnum == 0 && whole == 0)
cout << "0";
cout << endl;
}
int main(){
int num1, num2, den1, den2, ansnum, ansden, whole = 0;
char oper;
cout << "Welcome. enter your query in the following form: 4/3 + 3/5." <<
endl << "Put 'x' in the operator (4/3 x 3/5) to exit." << endl;
do{
frac_input(num1, den1, num2, den2, oper);
switch(oper){
case 'x': break;
case '*': multiply_frac(num1, den1, num2, den2, ansnum, ansden);
case '/': divide_frac(num1, den1, num2, den2, ansnum, ansden);
case '+': add_frac(num1, den1, num2, den2, ansnum, ansden);
case '-': subtract_frac(num1, den1, num2, den2, ansnum, ansden);
}
if(oper != 'x'){
expand(ansnum, ansden, whole);
reduce(ansnum, ansden);
output(num1, den1, num2, den2, ansnum, ansden, whole, oper);
}
} while(oper != 'x');
return 0;
}