rendered paste body#include <iostream.h>
#include <math.h>
#include <ctype.h>
#include <string.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 nume1, nume2, dene1, dene2, trash;
bool valid;
do{
valid = true;
cout << "Enter like this: 4 / 2 + 3 / 3: ";
cin >>nume1>>trash>>dene1>>oper>>nume2>>trash>>dene2;
if(dene1 == '0' || dene2 == '0'){
valid = false;
cout << "Denominator is zero. please retry." << endl;
}
if(!(isdigit(nume1) && isdigit(nume2) && isdigit(dene1) && isdigit(dene2))){
valid = false;
cout << "Please enter only numbers." << endl;
}
if(oper != '*' && oper != '/' && oper != '+' && oper != '-'){
valid = false;
cout << "Invalid operator. please retry. " << endl;
}
} while (valid == false);
// need to convert back to int here.
// NEED TO
}
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;
}
void act_menu(){
int num1, num2, den1, den2, ansnum, ansden, whole = 0;
char oper;
frac_input(num1, den1, num2, den2, oper);
switch(oper){
case '*': multiply_frac(num1, den1, num2, den2, ansnum, ansden);
break;
case '/': divide_frac(num1, den1, num2, den2, ansnum, ansden);
break;
case '+': add_frac(num1, den1, num2, den2, ansnum, ansden);
break;
case '-': subtract_frac(num1, den1, num2, den2, ansnum, ansden);
break;
}
expand(ansnum, ansden, whole);
reduce(ansnum, ansden);
output(num1, den1, num2, den2, ansnum, ansden, whole, oper);
}
int main(){
do act_menu();
while(1 != 0);
return 0;
}