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;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.