From Object-Oriented Programming in C++ by Robert Lafore (4th Edition)
Chapter 4, Exercise 12 and Chapter 5, Exercise 12:
We will revise the four-function fraction calculator program of Problem #6 so that each fraction is stored internally as a variable of type struct fraction. We will also add functions for each of the four arithmetic operations. Each function of these functions should take two arguments of type struct fraction and return an argument of the same type.
Solution:
#include<iostream>
using namespace std;
struct fraction
{
float number;
};
fraction fAdd(fraction, fraction);
fraction fSub(fraction, fraction);
fraction fMul(fraction, fraction);
fraction fDiv(fraction, fraction);
int main()
{
fraction firstNumber,secondNumber;
char operat = NULL;
float result;
char ans = ‘y’;
do
{
cout«”Enter first number, operator, second number: “;
cin»firstNumber.number; cin»operat; cin»secondNumber.number;
switch(operat)
{
case ‘+’:
result = fAdd(firstNumber, secondNumber).number;
break;
case ‘-‘:
result = fSub(firstNumber, secondNumber).number;
break;
case ‘*’:
result = fMul(firstNumber, secondNumber).number;
break;
case ‘/’:
result = (firstNumber, secondNumber).number;
break;
default:
cout«”Invalid Operator”«endl;
break;
} // end switch
cout«”Answer: “«result;
cout«”\nDo another? (y/n)? “; cin»ans;
} while(ans != ‘n’);
return 0;
}
fraction fAdd(fraction n1, fraction n2)
{
fraction res = {n1.number + n2.number};
return res;
}
fraction fSub(fraction n1, fraction n2)
{
fraction res = {n1.number - n2.number};
return res;
}
fraction fMul(fraction n1, fraction n2)
{
fraction res = {n1.number * n2.number};
return res;
}
fraction fDiv(fraction n1, fraction n2)
{
fraction res = {n1.number - n2.number};
return res;
}