CS396-Projects/assignmentTwo/fraction.cpp

131 lines
4.6 KiB
C++

/*
Program Name: Fraction
Process: ???
Function Input/Parameters: ???
Function Output/Parameters: ???
Function Output/Returned: ???
Device Input/Device: ???
Device Output/Monitor: ???
Dependencies: ???
*/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
#include <random>
#include <algorithm>
#include <time.h>
using namespace std;
// class definitions
class Fraction
{
private:
int numerator;
int denominator;
public:
Fraction()
{
// default constructor, initializes to 0/1
numerator = 0;
denominator = 1;
}
Fraction(int numeratorInput, int denominatorInput)
{
numerator = numeratorInput;
denominator = denominatorInput;
}
~Fraction()
{
// default destructor
}
// accessor functions
// mutator functions
// operators
friend bool operator==(const Fraction &fractionOne, const Fraction &fractionTwo)
{
// return true if the numerator and the denominator are equal
// return ((fractionOne.numerator == fractionTwo.numerator) && (fractionOne.denominator == fractionTwo.denominator)); // old version before hints
return ((fractionOne.numerator * fractionTwo.denominator) == (fractionTwo.numerator * fractionOne.denominator));
}
friend Fraction operator+(const Fraction &fractionOne, const Fraction &fractionTwo)
{
return Fraction(((fractionOne.numerator * fractionTwo.denominator) + (fractionTwo.numerator * fractionOne.denominator)),
(fractionOne.denominator * fractionTwo.denominator));
}
friend Fraction operator-(const Fraction &negateFraction)
{
return Fraction(-negateFraction.numerator, negateFraction.denominator);
}
friend Fraction operator-(const Fraction &fractionOne, const Fraction &fractionTwo)
{
return Fraction(((fractionOne.numerator * fractionTwo.denominator) - (fractionTwo.numerator * fractionOne.denominator)),
(fractionOne.denominator * fractionTwo.denominator));
}
friend Fraction operator*(const Fraction &fractionOne, const Fraction &fractionTwo)
{
return Fraction((fractionOne.numerator * fractionTwo.numerator), (fractionOne.denominator * fractionTwo.denominator));
}
friend Fraction operator/(const Fraction &fractionOne, const Fraction &fractionTwo)
{
return Fraction((fractionOne.numerator * fractionTwo.denominator), (fractionOne.denominator * fractionTwo.numerator));
}
friend ostream &operator<<(ostream &out, const Fraction &fractionOut)
{
return out << fractionOut.numerator << "/" << fractionOut.denominator;
}
friend istream &operator>>(istream &in, Fraction &fractionIn)
{
// get a temporary string to read into.
string inStr;
// read in the string
in >> inStr;
// find position of the '/' character in the string (had to use the size_t to prevent errors/warnings.)
size_t slashPos = inStr.find("/");
// check to see if the slash was found, if it was, load the data.
if(slashPos != string::npos)
{
// set the data in.
fractionIn.numerator = atoi(inStr.substr(0, slashPos).c_str());
fractionIn.denominator = atoi(inStr.substr(slashPos + 1).c_str());
}
return in;
}
};
// function definitions
// main function
int main()
{
Fraction fiveFifths(5, 5);
Fraction threeFifths(3, 5);
Fraction sevenTenths(7, 10);
Fraction fourTenths(4, 10);
Fraction userFraction;
// let user know the fractions.
cout << "The fractions are: " << endl;
cout << "\t" << fiveFifths << endl;
cout << "\t" << threeFifths << endl;
cout << "\t" << sevenTenths << endl;
cout << "\t" << fourTenths << endl;
// ask the user to input a fraction.
cout << "Enter in a fraction in numerator/denominator format: [n/d]" << endl;
cin >> userFraction;
cin.ignore();
// print back out the fraction
cout << "Your fraction is: " << endl;
cout << "\t" << userFraction << endl;
// add seven tenths and four tenths
cout << sevenTenths << " + " << fourTenths << " is " << sevenTenths + fourTenths << endl;
// subtract five fifths from three fifths
cout << fiveFifths << " - " << threeFifths << " is " << fiveFifths - threeFifths << endl;
// multiply three fifths and four tenths
cout << threeFifths << " * " << fourTenths << " is " << threeFifths * fourTenths << endl;
// divide four tenths and three fifths.
cout << fourTenths << " / " << threeFifths << " is " << fourTenths / threeFifths << endl;
return 0;
}