#include #include #include #include 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 << "Enter like this: 4 / 2 + 3 / 3: "; cin >>num1>>trash>>den1>>oper>>num2>>trash>>den2; if(den1 == 0 || den2 == 0){ valid = false; cout << "Denominator is zero. please retry." << endl; } if(!(isdigit(char(num1+48)) && isdigit(char(num2+48)) && isdigit(char(den1 + 48)) && isdigit(char(den2 + 48)))){ valid = false; cout << "Please enter only numbers." << endl; } if(oper != '*' && oper != '/' && oper != '+' && oper != '-'){ 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; } 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(){ char nume[] = "123"; cout << isdigit(nume[0]) << endl; do act_menu(); while(1 != 0); return 0; }