Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Under Fraction.cpp Where you have printFraction, I want you to write a function

ID: 3741249 • Letter: U

Question

Under Fraction.cpp

Where you have printFraction, I want you to write a function called getFraction that will return a string. String is going to be your return.

Under Main.cpp

Create two functions, which are read fraction and write fraction. Write to the file and randomly generate a numerator and denominator.

My code

Fraction.cpp

#include <fstream>

#include <iostream>

#include "Fraction.h"

using namespace std;

Fraction::Fraction()

{

this->setFraction(1, 1);

}

Fraction::Fraction(int num, int den)

{

this->setFraction(num, den);

}

void Fraction::setFraction(int n, int d)

{

this->num = n;

this->den = d;

}

Fraction Fraction::add(const Fraction &f)

{

Fraction tmp;

tmp.num = (this->num*f.den) + (f.num*this->den);

tmp.den = f.den*den;

return tmp;

}

Fraction Fraction::sub(const Fraction &f)

{

Fraction tmp;

tmp.num = (this->num*f.den) - (f.num*f.den);

tmp.den = f.den*this->den;

return tmp;

}

Fraction Fraction::mul(const Fraction &f)

{

Fraction tmp;

tmp.num = this->num*f.num;

tmp.den = this->den*f.den;

return tmp;

}

Fraction Fraction::div(const Fraction &f)

{

Fraction tmp;

tmp.num = this->num*f.den;

tmp.den = this->den*f.num;

if (tmp.den < 0)

{

tmp.num *= -1;

tmp.den *= -1;

}

return tmp;

}

void Fraction::printFraction()

{

cout << this->num << "/" << this->den << endl;

}

int Fraction::getDen() const

{

return this->den;

}

int Fraction::getNum() const

{

return this->num;

}

Fraction Fraction::operator+(const Fraction &f)

{

return this->add(f);

}

Fraction Fraction::operator- (const Fraction &f)

{

return this->sub(f);

}

Fraction Fraction::operator*(const Fraction &f)

{

return this->mul(f);

}

Fraction Fraction::operator/(const Fraction&f)

{

return this->div(f);

}

Fraction &Fraction::operator=(const Fraction &f)

{

this->setFraction(f.getNum(), f.getDen());

return*this;

}

ostream & operator<<(ostream & output, const Fraction & f)

{

output << "num: " << endl;

output << "den: "<< endl;

return output;

}

istream &operator>> (istream &input, Fraction &f)

{

cout << "Enter a Numerator" << endl;

input >> f.num;

cout << "Enter a Denominator" << endl;

input >> f.den;

return input;

}

main.cpp

#include <iostream>

#include<fstream>

#include "Fraction.h"

using namespace std;

void writeNumbers(int amount);

void readNumbers();

int main()

{

//writeNumbers(10);

readNumbers();

return 0;

}

void writeNumbers(int amount)

{

ofstream outfile("Numbers.txt");

if (!outfile)

{

cout << "unable to open the file for writing" << endl;

exit(1);

}

for (int i = 0; i < amount; i++)

{

outfile << rand() % 100 << endl;

}

outfile.close();

}

void readNumbers()

{

ifstream infile("Numbers.txt");

if (!infile)

{

cout << "Unable to open the file for reading"

return;

}

char input[100];

while (infile >> input)

cout << input << endl;

infile.close();

}

Explanation / Answer

Fraction.h was missing so I created my own .. Let me know in comments if you have any trouble in this.

Fraction.h

#include <iostream>
#include <string>
#ifndef FRACTION
#define FRACTION

using std::istream;
using std::ostream;
using std::string;
class Fraction
{
private:
    int *num;
    int *den;
    // Static Variable Count
    static int count;
public:
    void setFraction(int n, int d);
    void create();
    Fraction add(const Fraction &f);
    Fraction sub(const Fraction &f);
    Fraction mul(const Fraction &f);
    Fraction div(const Fraction &f);
    string toString();
    int getNum() const;
    int getDen() const;
    void printFraction();
   string getFraction();

    //Constructors
    Fraction();
    Fraction(int num, int den);
    Fraction(const Fraction &f);
    //Destructor

    ~Fraction();

    //Operator Overloads
    Fraction operator + (const Fraction &f);
    Fraction operator - (const Fraction &f);
    Fraction operator *(const Fraction &f);
    Fraction operator /(const Fraction &f);
    bool operator ==(const Fraction&f);

    //Friends
    friend istream &operator >> (istream &input, Fraction &f);
    friend ostream &operator<<(ostream &output, Fraction &f);

    //Static Variable PrintCount-Accessor

    static void printCount();


};

#endif

Fraction.cpp

#include <iostream>
#include <string>
#include <sstream>
#include "Fraction.h"

using namespace std;
//Initializing Variable
int Fraction::count = 0;
Fraction::Fraction()
{
    this->create();
    this->setFraction(1, 1);
}
Fraction::Fraction(int num, int den)
{
    this->create();
    this->setFraction(num, den);
    //Incrementing Counter
    Fraction::count++;
}
Fraction::Fraction(const Fraction &f)
{
    this->create();
    this->setFraction(f.getNum(), f.getDen());
    //Increment Counter
    Fraction::count++;
}
Fraction::~Fraction()
{
    //Decrement counter
    Fraction::count--;
}
//Counting instances
void Fraction::printCount()
{
    cout << "There are " << Fraction::count << " Instances" << endl;
}
void Fraction::create()
{
    this->num = new int;
    this->den = new int;
}

void Fraction::setFraction(int n, int d)
{
    *this->num = n;
    *this->den = d;
}
Fraction Fraction::add(const Fraction &f)
{
    Fraction tmp;
    *tmp.num = (*this->num * *f.den) + (*f.num * *this->den);
    *tmp.den = *f.den * *this->den;
    return tmp;
}
Fraction Fraction::sub(const Fraction &f)
{
    Fraction tmp;
    *tmp.num = (*this->num* *f.den) - (*f.num * *f.den);
    *tmp.den = *f.den * *this->den;
    return tmp;
}
Fraction Fraction::mul(const Fraction &f)
{
    Fraction tmp;
    *tmp.num = *this->num * *f.num;
    *tmp.den = *this->den * *f.den;
    return tmp;
}
Fraction Fraction::div(const Fraction &f)
{
    Fraction tmp;
    *tmp.num = *this->num* *f.den;
    *tmp.den = *this->den* *f.num;
    //Conversion
    if (tmp.den < 0)
    {
        *tmp.num *= -1;
        *tmp.den *= -1;
    }
    return tmp;
}
string Fraction::toString()
{
    stringstream ss;
    ss << this->num << "/" << this->den;
    return ss.str();
}
void Fraction::printFraction()
{
    cout << *this->num << "/" << *this->den << endl;
}
string Fraction::getFraction(){
   stringstream ss;
    ss << *this->num << "/" << *this->den;
    return ss.str();
}
int Fraction::getDen() const
{
    return *this->den;
}
int Fraction::getNum() const
{
    return *this->num;
}
Fraction Fraction::operator+(const Fraction &f)
{
    return this->add(f);
}
Fraction Fraction::operator-(const Fraction &f)
{
    return this->sub(f);
}
Fraction Fraction::operator*(const Fraction &f)
{
    return this->mul(f);
}
Fraction Fraction::operator/(const Fraction &f)
{
    return this->div(f);
}
bool Fraction::operator==(const Fraction &f)
{
    return(this->num == f.num && this->den == f.den);
}
ostream &operator << (ostream &output, Fraction &f)
{
    output << *f.num << "/" << *f.den << endl;
    return output;
}
istream &operator >> (istream &input, Fraction &f)
{
    cout << "Enter a numerator" << endl;
    input >> *f.num;
    cout << "Enter a denominator" << endl;
    input >> *f.den;

    return input;
}

Main.cpp

#include <iostream>
#include<fstream>
#include "Fraction.h"

using namespace std;
void writeNumbers(Fraction *arr, int size);
void readNumbers(Fraction *&arr, int &size);
int main()
{
   Fraction *arr = NULL;
   int size = 0;
   readNumbers(arr, size);
   writeNumbers(arr, size);
   return 0;
}
void writeNumbers(Fraction *arr, int size)
{
   ofstream outfile("Numbers.txt");
   if (!outfile.is_open())
   {
       cout << "Unable to open the file for writing" << endl;
       exit(1);
   }
   else{
       for(int i = 0; i < size; ++i){
           outfile << arr[i] << endl;
           cout << arr[i] << endl;
       }
       outfile.close();
   }
}

void readNumbers(Fraction *&arr, int &size)
{
   ifstream infile("Numbers.txt");
   if(infile.is_open()){
       int num, den;
       char ch;
       arr = new Fraction[50];
       size = 0;
       while (infile >> num){
           infile >> ch;
           infile >> den;
           arr[size].setFraction(num, den);
           size++;
       }
       infile.close();
   }
   else{
       cout << "can not open Numbers.txt to read" << endl;
   }
}