Question

C++ PROGRAMMING Hi! I have to make a program that adds fractions and simplifies them. I...

C++ PROGRAMMING

Hi! I have to make a program that adds fractions and simplifies them. I feel like I know how to write that. What I'm having trouble with is implementing two files the professer gave us. I would appreicate any help in understanding their purpose as in if Im supposed to take information from those files or give it information. Thank you!

I have attatched the homework instructions and the two files given.

Implementation

The main program, called calculator.cpp , is provided. Your project must include a class Fraction that encapsulates all functions related to the processing of fractions. The >> and <<

operators must be overloaded and used to read and write fractions. The presence of a zero denominator in input should be handled by throwing an exception of type invalid_argument defined in <stdexcept>. The class Fraction must be defined in a source file Fraction.cpp and declared in a header file Fraction.h. The implementation of the member functions should be defined in the file Fraction.cpp. The class Fraction must include a constructor Fraction::Fraction(int a, int b). The internal representation of the fraction should be in reduced form, i.e. using a pair of numbers that have no common factors. Constructors and other member functions must ensure that the fraction is always reduced. Use Euclid's algorithm to simplify fractions to reduced form. An example of a C implementation of this algorithm is provided on the web site web.cs.ucdavis.edu/~fgygi/ecs40 in the example programs of Lecture 1. The operators '+', '-' and '=' must be overloaded and defined. Member functions getNum() and getDen() should be implemented, returning the (reduced) numerator and denominator of the fraction. It should be possible to use the class Fraction in the program useFraction.cpp which #includes the header Fraction.h. The program useFraction.cpp is provided on the web site web.cs.ucdavis.edu/~fgygi/ecs40. You should not modify that program.

//
// useFraction.cpp
//
// DO NOT MODIFY THIS FILE
//

#include "Fraction.h"
#include<iostream>
using namespace std;

void print_fraction(const Fraction& f)
{
cout << "print_fraction: " << f.getNum() << "/" << f.getDen() << endl;
}

int main()
{
Fraction x(2,3);
Fraction y(6,-2);

cout << x << endl;
cout << y << endl;

cin >> y;
cout << y << endl;
print_fraction(y);
Fraction z = x + y;
cout << x << " + " << y << " = " << z << endl;
}

//
// calculator.cpp
//
// DO NOT MODIFY THIS FILE
//

#include "Fraction.h"
#include<iostream>
#include<stdexcept>
using namespace std;

int main()
{
Fraction x,y;
char op
try
{
cin >> x;
cin >> op;
while ( cin && ( op == '+' || op == '-' ) )
{
cin >> y;
if ( op == '+' )
x = x + y;
else
x = x - y;
cin >> op;
}
cout << x << endl;
}
catch ( invalid_argument& e )
{
cout << "Error: " << e.what() << endl;
}
}

Homework Answers

Answer #1

The two files given by your professor are main programs to test your code.

Your code should consist of two files, Fraction.h and Fraction.cpp.

Here is my implementation of the code. You can have this as a referrence to produce your own.

Fraction.h

#ifndef Fraction_h

#define Fraction_h

#include <iostream>

using namespace std;

class Fraction

{

public:

//Functions

Fraction();

Fraction(int,int);

   int getNum() const;

   int getDen() const;

   void setNum(int num);

   void setDen(int den);

   void reduce();

   void signs();

   friend ostream& operator<<(ostream &out,const Fraction &);

   friend istream& operator>>(istream &,Fraction &);

   Fraction operator+(const Fraction );

private:

int nemer;

int denom;

};

#endif

Fraction.cpp

#include "fraction.h"

#include <stdexcept>

#include <iostream>

#include <cstdlib>

using namespace std;

Fraction::Fraction()

{

   setNum(0);

   setDen(1);

}

Fraction::Fraction(int nem, int dem)

{

   if (dem == 0)

   {

   throw invalid_argument("Error: denominator is zero");

   }

   else

   {

   setNum(nem);

   setDen(dem);

   reduce();

   }

}

void Fraction::setNum(int num)

{

   nemer = num;

}

void Fraction::setDen(int den)

{

   denom = den;

}

int Fraction::getNum() const

{

   return nemer;

}

int Fraction::getDen() const

{

   return denom;

}

void Fraction::reduce()

{

   signs();

   int Sign = 1;

   int nem = getNum();

   int den = getDen();

   if (nem < 0)

   {

   nem *= -1;

   Sign = -1;

   }

   for (int i = (nem * den); i > 1; i--)

   {

   if ((nem % i == 0) && (den % i == 0))

   {

   nem /= i;

   den /= i;

   }

   }

   nem *= Sign;

   setNum(nem);

   setDen(den);

}

void Fraction::signs()

{

   int nem = getNum();

   int den = getDen();

   if (den < 0)

   {

   nem *= -1;

   den *= -1;

   }

   setNum(nem);

   setDen(den);

}

istream &operator>>(istream &in, Fraction &frac)

{

   int num;

   int den;

   in >> num;

   in >> den;

   if (den == 0)

   {

   throw invalid_argument("Error: denominator is zero");

   exit(0);

   }

   frac.setNum(num);

   frac.setDen(den);

   frac.reduce();

   return in;

}

ostream &operator<<(ostream& out, const Fraction& frac)

{

   if (frac.getDen() == 1)

   out << frac.getNum();

   else

   {

   out << frac.getNum() << "/" << frac.getDen() ;

   }

   return out;

}

Fraction Fraction::operator+(const Fraction frac)

{

   int Nsum = ((*this).getNum() * frac.getDen()) + (frac.getNum() * (*this).getDen());

   int Dsum = ((*this).getDen() * frac.getDen());

   Fraction frac2(Nsum, Dsum);

   frac2.reduce();

   return frac2;

}

//The below methods have been copy-pasted from useFraction.cpp - This is for testing your code
void print_fraction(const Fraction& f)

{

cout << "print_fraction: " << f.getNum() << "/" << f.getDen() << endl;

}

int main()

{

Fraction x(2,3);

Fraction y(6,-2);

cout << x << endl;

cout << y << endl;

cout<<"Enter fraction: ";

cin >> y;

cout << y << endl;

print_fraction(y);

Fraction z = x + y;

cout << x << " + " << y << " = " << z << endl;

}

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions
Please write variables and program plan (pseudocode) of the C++ programming below: #include <iostream> #include <cmath>...
Please write variables and program plan (pseudocode) of the C++ programming below: #include <iostream> #include <cmath> using namespace std; void divisors(int num); int main () {    char repeat;    int num;       while (repeat !='n')    {        cout << "Enter a number: ";        cin >> num;        divisors(num);        cout << "Continue? (y or n): ";        cin >> repeat;    }    return 0; } void divisors(int num) {   ...
C++ please Write code to implement the Karatsuba multiplication algorithm in the file linked in Assignment...
C++ please Write code to implement the Karatsuba multiplication algorithm in the file linked in Assignment 2 (karatsuba.cpp) in Canvas (please do not rename file or use cout/cin statements in your solution). As a reminder, the algorithm uses recursion to produce the results, so make sure you implement it as a recursive function. Please develop your code in small The test program (karatsuba_test.cpp) is also given. PLEASE DO NOT MODIFY THE TEST FILE. KARATSUBA.CPP /* Karatsuba multiplication */ #include <iostream>...
C++ Please and thank you. I will upvote Read the following problem, and answer questions. #include<iostream>...
C++ Please and thank you. I will upvote Read the following problem, and answer questions. #include<iostream> using namespace std; void shownumbers(int, int); int main() { int x, y; cout << "Enter first number : "; cin >> x; cout << "Enter second number : "; cin >> y; shownumbers(x, y); return 0; } void shownumbers(int a, int b) { bool flag; for (int i = a + 1; i <= b; i++) { flag = false; for (int j =...
Trace the C++ program below showing all output in the order that it is displayed. If...
Trace the C++ program below showing all output in the order that it is displayed. If anything happens that makes it impossible to accomplish an operation or the results of so doingare unpredictable, describe what happens and abort the program at that point. Assume the Queue class is fully defined in an appropriate header and implementation file. The effect of the functions (methods) is as follows - Constructor - creates an empty queue #include <iostream> #include using namespace std; #include...
C++ #include<iostream> #include<string> #include<fstream> #include<cstdlib> using namespace std; const int ROWS = 8; //for rows in...
C++ #include<iostream> #include<string> #include<fstream> #include<cstdlib> using namespace std; const int ROWS = 8; //for rows in airplane const int COLS = 4; void menu(); //displays options void displaySeats(char[][COLS]); void reserveSeat(char [ROWS][COLS]); int main() { int number=0; //holder variable char seatChar[ROWS][COLS]; for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { seatChar[i][j] = '-'; } } int choice; //input from menu bool repeat = true; //needed for switch loop while (repeat...
This is the program that I need to make. Write a program that prints three items,...
This is the program that I need to make. Write a program that prints three items, such as the names of your three best friends or favorite movies, on three separate lines. This is what I did. #include <iostream> using namespace std; int main() { cout << "Suresh" << endl; cout << "Sekhar" << endl; cout << "Anshu" << endl; return 0; } Then it tells me that the program fails to test the submission with three random names. Please...
1) Create a flowchart for the program below and Trace the program below with input of...
1) Create a flowchart for the program below and Trace the program below with input of 3 and then again with input of 5. #include <iostream> using namespace std; int Fall(int x, int m) { int Xm = 1, i=x; while(i>=x-m+1) { Xm = Xm*i; i=i-1; } return Xm; } int Delta(int x, int m) { int ans = 0; ans = Fall(x+1,m); ans = ans - Fall(x,m); return ans; } void main() { int x = 0, m =...
C++ programming Write a program that reads a comma-separated file (CSV) with integer values and prints...
C++ programming Write a program that reads a comma-separated file (CSV) with integer values and prints the number of integer values in the file. Your program's input will be a string with the name of the file. If the file does not exist, then the program must print: Error opening the file For example, given the following CSV file input1.csv: 1,10,20,30,40 The output of your program must be: 5 You can safely assume that the input file will be a...
Write a program that accepts as input the mass, in grams, and density, in grams per...
Write a program that accepts as input the mass, in grams, and density, in grams per cubic centimeters, and outputs the volume of the object using the formula: volume = mass / density. Format your output to two decimal places. ** Add Comments ** Print Name and Assignment on screen ** Date ** Submit .cpp file. Demo // This program uses a type cast to avoid an integer division. #include <iostream> // input - output stream #include <fstream> //working file...
tacks. Trace the C++ program below showing all output in the order that it is displayed....
tacks. Trace the C++ program below showing all output in the order that it is displayed. If anything happens that makes it impossible to accomplish an operation or the results of so doing are unpredictable, describe what happens and abort the program at that point. Assume the Stack class is fully defined in an appropriate header and implementation file. The effect of the functions (methods) is as follows: constructor - creates an empty stack empty - returns true if the...