Define each function in the as you type the code and must be preceded by a comme
ID: 3935159 • Letter: D
Question
Define each function in the as you type the code and must be preceded by a comment block that includes the following:
One line per parameter indicating if it is an input (passed by value) or IO (passed by reference) parameter, the type of the parameter and a very brief description of the parameter.
One line indicating the return type and describing it, for void functions indicate the function returns nothing.
A very brief description of the function's purpose.
This comment block should contain the information needed to use the function.
here is the code:
#include <iostream>
using namespace std;
struct fraction{
int numerator;
int denominator;
};
int abs( int val ){
if( val < 0 ){ val*= -1; }
return val;
}
int min( int a, int b){
if( a < b ){ return a; }
return b;
}
int gcd( int a, int b ){
int gcdIs = 0;
for(int i = 1; i <= min( a, b); i++){
if( a%i == 0 && b%i == 0 ){
gcdIs = i;
}
}
return gcdIs;
}
void reduce( fraction &a ){
int sign = a.numerator*a.denominator;
a.numerator= abs( a.numerator );
a.denominator = abs( a.denominator );
int gcdIs = gcd( a.numerator, a.denominator );
a.numerator /= gcdIs;
a.denominator /= gcdIs;
if( sign < 0 ){ a.numerator*= -1; }
}
void flip( fraction& a ){
int temp = a.numerator;
a.numerator = a.denominator;
a.denominator = temp;
if( a.denominator < 0 ){
a.denominator*= -1;
a.numerator*= -1;
}
}
fraction add( fraction a, fraction b ){
fraction c;
c.numerator = a.numerator*b.denominator + a.denominator*b.numerator;
c.denominator = a.denominator*b.denominator;
reduce(c);
return c;
}
fraction subtract( fraction a, fraction b ){
b.numerator*= -1;
return add( a, b );
}
fraction multiply( fraction a, fraction b ){
fraction c;
c.numerator = a.numerator*b.numerator;
c.denominator = a.denominator*b.denominator;
reduce(c);
return c;
}
fraction divide( fraction a, fraction b ){
flip(b);
return multiply( a, b );
}
int main(){
cout << "Fraction Calculator 1.0" << endl;
cout << "Enter an arithmetic expression of the form a/b @ c/d," << endl;
cout << "Replace @ by any one of +, -, *, or /" << endl;
fraction a,b, result;
char optr, temp;
while( true ){
cout << "?> ";
cin >> a.numerator >> temp >> a.denominator >> optr >> b.numerator >> temp >> b.denominator;
if( a.denominator == 0 || b.denominator == 0 ){
cout << "Errorneous input, enter again" << endl;
continue;
}
reduce(a);
reduce(b);
if( optr == '+' ){
result = add( a, b ); }
if( optr == '-' ){
result = subtract( a, b ); }
if( optr == '*' ){
result = multiply( a, b ); }
if( optr == '/' ){
result = divide( a, b ); }
//print the result
cout << "Solution: ("<< a.numerator << "/" << a.denominator <<") ";
cout << optr;
cout << " ("<< b.numerator << "/" << b.denominator <<") = ";
cout << result.numerator << "/" << result.denominator << endl;
cout << "Again (Y/N)? ";
cin >> temp;
if( temp != 'Y' ){
break;
}
}
return 0;
}
Explanation / Answer
#include <iostream>
using namespace std;
struct fraction{
int numerator;
int denominator;
};
/*
Params:
val-> type: int, value for which you want to calculate absolute value
returns absolute value of the input parameter
*/
int abs( int val ){
if( val < 0 ){ val*= -1; }
return val;
}
/*
Params:
a-> type: int (by value)
b-> type: int (by value)
returns the minimum value of a and b
*/
int min( int a, int b){
if( a < b ){ return a; }
return b;
}
/*
Params:
a-> type: int (by value)
b-> type: int (by value)
calculates and returns the gcd of a and b
*/
int gcd( int a, int b ){
int gcdIs = 0;
for(int i = 1; i <= min( a, b); i++){
if( a%i == 0 && b%i == 0 ){
gcdIs = i;
}
}
return gcdIs;
}
/*
Params:
a-> type: fraction(by reference), A fraction for which the numerator and denominator terms should be reduced
returns: None
It reduces the numerator and denominator terms of the input fraction parameter using gcd
*/
void reduce( fraction &a ){
int sign = a.numerator*a.denominator;
a.numerator= abs( a.numerator );
a.denominator = abs( a.denominator );
int gcdIs = gcd( a.numerator, a.denominator );
a.numerator /= gcdIs;
a.denominator /= gcdIs;
if( sign < 0 ){ a.numerator*= -1; }
}
/*
Params:
a-> type: fraction(by reference), A fraction for which numerator and denominators are to be swapped
returns: None
It swaps numerator and denominator values of a given fraction
*/
void flip( fraction& a ){
int temp = a.numerator;
a.numerator = a.denominator;
a.denominator = temp;
if( a.denominator < 0 ){
a.denominator*= -1;
a.numerator*= -1;
}
}
/*
Params:
a-> type: fraction (by value)
b-> type: fraction (by value)
return: type: fraction
calculates and returns the addition of two fractions
*/
fraction add( fraction a, fraction b ){
fraction c;
c.numerator = a.numerator*b.denominator + a.denominator*b.numerator;
c.denominator = a.denominator*b.denominator;
reduce(c);
return c;
}
/*
Params:
a-> type: fraction (by value)
b-> type: fraction (by value)
return: type: fraction
calculates and returns the subtraction of two fractions
*/
fraction subtract( fraction a, fraction b ){
b.numerator*= -1;
return add( a, b );
}
/*
Params:
a-> type: fraction (by value)
b-> type: fraction (by value)
return: type: fraction
calculates and returns the multiplication of two fractions
*/
fraction multiply( fraction a, fraction b ){
fraction c;
c.numerator = a.numerator*b.numerator;
c.denominator = a.denominator*b.denominator;
reduce(c);
return c;
}
/*
Params:
a-> type: fraction (by value)
b-> type: fraction (by value)
return: type: fraction
calculates and returns the division of two fractions
*/
fraction divide( fraction a, fraction b ){
flip(b);
return multiply( a, b );
}
int main(){
cout << "Fraction Calculator 1.0" << endl;
cout << "Enter an arithmetic expression of the form a/b @ c/d," << endl;
cout << "Replace @ by any one of +, -, *, or /" << endl;
fraction a,b, result;
char optr, temp;
while( true ){
cout << "?> ";
cin >> a.numerator >> temp >> a.denominator >> optr >> b.numerator >> temp >> b.denominator;
if( a.denominator == 0 || b.denominator == 0 ){
cout << "Errorneous input, enter again" << endl;
continue;
}
reduce(a);
reduce(b);
if( optr == '+' ){
result = add( a, b ); }
if( optr == '-' ){
result = subtract( a, b ); }
if( optr == '*' ){
result = multiply( a, b ); }
if( optr == '/' ){
result = divide( a, b ); }
//print the result
cout << "Solution: ("<< a.numerator << "/" << a.denominator <<") ";
cout << optr;
cout << " ("<< b.numerator << "/" << b.denominator <<") = ";
cout << result.numerator << "/" << result.denominator << endl;
cout << "Again (Y/N)? ";
cin >> temp;
if( temp != 'Y' ){
break;
}
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.