C++ Exercise :- Read the documentation of the header file carefully. Four of the
ID: 3724004 • Letter: C
Question
C++
Exercise :- Read the documentation of the header file carefully. Four of the function
implementations have documentation and the others do not. Explain how these four
are different.
Exercise :- Fill in the missing code in the implementation file, and compile
fraction.cpp. Were there many bugs in your file? Describe any problems that you
had.
Exercise :- Write a driver that uses class Fraction to do the following calculations:
1/2 + 1/4
1/2 1/4
1/2 * 1/2
1/2 / 1/2
Write the output clearly labeled.
// Header file fraction.h declares class Fraction.
class Fraction
// Class Fraction represents the numerator and
// denominator of a fraction.
{
public:
// Constructors
Fraction();
// Post: Numerator and denominator have been set to zero
Fraction(initNumerator, initDenominator);
// Post: Numerator has been set to initNumerator;
// denominator has been set to initDenominator.
Fraction Add(Fraction frac1) const;
// Post: self + frac1 is returned.
Fraction Subtract(Fraction frac1) const;
// Post: self - frac1 is returned.
Fraction Multply(Fraction frac1) const;
// Post: self * frac1 is returned.
Fraction Divide(Fraction frac1) const;
// Post: self / frac1 is returned.
int GetNumerator() const;
// Post: Numerator of frac1 is returned.
int GetDenominator() const;
// Post: Denominator of frac1 is returned.
private:
int numerator;
int denominator;
};
____________________________________________________________
//*******************************************************
// Implementation file fraction.cpp implements the member
// functions of class Fraction.
#include "fraction.h"
Fraction::Fraction()
{
// FILL IN Code for default constructor.
}
Fraction::Fraction(initNumerator, initDenominator)
{
// FILL IN Code for default constructor.
}
Fraction Fraction::Add(Fraction frac1) const
// Pre: frac1 and self have been initialized.
// Post: frac1 + self is returned in reduced form.
{
// FILL IN Code.
}
Fraction Fraction::Subtract(Fraction frac1) const
// Pre: frac1 and self have been initialized.
// Post: self - frac1 is returned in reduced form.are
{
// FILL IN Code.
}
Fraction Fraction::Multiply(Fraction frac1) const
// Pre: frac1 and self have been initialized.
// Post: self - frac1 is returned in reduced form.are
{
// FILL IN Code.
}
Fraction Fraction::Divide(Fraction frac1) const
// Pre: frac1 and self have been initialized.
// Post: self - frac1 is returned in reduced form.are
{
// FILL IN Code.
}
int Fraction::GetNumerator() const
{
// FILL IN Code.
}
int Fraction::GetDenominator() const
{
// FILL IN Code.
}
Explanation / Answer
######### fraction.h ##########
// Header file fraction.h declares class Fraction.
class Fraction
{
public:
// Constructors
Fraction();
// Post: Numerator and denominator have been set to zero
Fraction(int initNumerator, int initDenominator);
// Post: Numerator has been set to initNumerator;
// denominator has been set to initDenominator.
Fraction Add(Fraction sfrac1);
// Post: self + frac1 is returned.
Fraction Subtract(Fraction frac1);
// Post: self - frac1 is returned.
Fraction Multply(Fraction frac1);
// Post: self * frac1 is returned.
Fraction Divide(Fraction frac1);
// Post: self / frac1 is returned.
int GetNumerator() const;
// Post: Numerator of frac1 is returned.
int GetDenominator() const;
// Post: Denominator of frac1 is returned.
void Print();
private:
// Calculates the greates common divisor with Euclid's algorithm both
//arguments have to be positive
int gcd(int a, int b);
int numerator;
int denominator;
};
############# fraction.cpp ############
#include "fraction.h"
#include <iostream>
// Constructors
Fraction::Fraction(){
numerator = 0;
denominator = 1;
}
// Post: Numerator and denominator have been set to zero
Fraction::Fraction(int initNumerator, int initDenominator){
if(initDenominator == 0){
std::cout<<"Denominator can not be zero"<<std::endl;
exit(0);
}
int gc = gcd(initNumerator, initDenominator);
numerator = initNumerator/gc;
denominator = initDenominator/gc;
}
// Post: Numerator has been set to initNumerator;
// denominator has been set to initDenominator.
Fraction Fraction::Add(Fraction frac1){
int num = (numerator * frac1.denominator)+(frac1.numerator*denominator);
int denom = denominator * frac1.denominator;
int gc = gcd(num, denom);
return Fraction(num/gc, denom/gc);
}
// Post: self + frac1 is returned.
Fraction Fraction::Subtract(Fraction frac1){
int num = (numerator * frac1.denominator)-(frac1.numerator*denominator);
int denom = denominator * frac1.denominator;
int gc = gcd(num, denom);
return Fraction(num/gc, denom/gc);
}
// Post: self - frac1 is returned.
Fraction Fraction::Multply(Fraction frac1){
int num = numerator * frac1.numerator;
int denom = denominator * frac1.denominator;
int gc = gcd(num, denom);
return Fraction(num/gc, denom/gc);
}
// Post: self * frac1 is returned.
Fraction Fraction::Divide(Fraction frac1){
int num = numerator * frac1.denominator;
int denom = denominator * frac1.numerator;
int gc = gcd(num, denom);
return Fraction(num/gc, denom/gc);
}
// Post: self / frac1 is returned.
int Fraction::GetNumerator() const{
return numerator;
}
// Post: Numerator of frac1 is returned.
int Fraction::GetDenominator() const{
return denominator;
}
// Post: Denominator of frac1 is returned.
void Fraction::Print(){
if(denominator < 0){
numerator = (-numerator);
denominator = (-denominator);
}
if(denominator == 1)
std::cout<<numerator<<std::endl;
else
std::cout<<numerator<<"/"<<denominator<<std::endl;
}
// Calculates the greates common divisor with Euclid's algorithm both arguments have to be positive
int Fraction::gcd(int a, int b) {
while (a != b) {
if (a > b) {
a -= b;
}else {
b -= a;
}
}
return a;
}
######### test code ###########
#include <iostream>
#include "fraction.h"
using namespace std;
int main(){
Fraction f1(4,2);
cout<<"F1: ";
f1.Print();
cout<<"F2: ";
Fraction f2(5,6);
f2.Print();
cout<<"F1+F2: ";
Fraction f3 = f1.Add(f2);
f3.Print();
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.