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

C++ Programming I am having problems getting my program to cout. It compiles cor

ID: 3871229 • Letter: C

Question

C++ Programming

I am having problems getting my program to cout. It compiles correctly and there are no erros, not sure whats wrong.

Here is it the question I am working on.

Modify the class Rationa l of Programming Challenge 8 to add overloaded operators
+, - , *,and/ to be used for addition, subtraction, multiplication , and division. Test the
class by reading and processing from the keyboard (or from a file) a series of rationa l
expressions such as
2 / 3 + 2 / 8
2 / 3 * - 2 / 8
2 / 3 - 2/ 8
2 / 3 / 2 / 8
To facilitate parsing of the input, you may assume that number s and arithmetic
operators are separated by whitespace.

Here is my code.

Rational.cpp

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

void Rational::assignData( int m, int n)
{
   num = m;
   denomination = n;
}

Rational::Rational()
{
   num = 0;
   denomination =0;
}

Rational operator+(Rational a, Rational b)
{
   Rational result;

   if (a.denomination == b.denomination)
   {
       result.num = a.num + b.num;
       result.denomination = a.denomination;
       return result;
   }

   else

   {
       a.num = a.num * b.denomination;
       b.num = b.num * a.denomination;
       a.denomination = a.denomination * b.denomination;
       b.denomination = a.denomination * b.denomination;
       result.num = a.num + b.num;
       result.denomination = a.denomination + b.denomination;
       return result;
   }
}

Rational operator-(Rational a, Rational b)
{
   Rational result;

   if (a.denomination == b.denomination)
   {
       result.num = a.num - b.num;
       result.denomination = a.denomination;
       return result;
   }

       else

   {
       a.num = a.num * b.denomination;
       b.num = b.num * a.denomination;
       a.denomination = a.denomination * b.denomination;
       b.denomination = a.denomination * b.denomination;
       result.num = a.num - b.num;
       result.denomination = a.denomination;
       return result;
   }

}

Rational operator*(Rational a, Rational b)
{
   Rational result;

   {
       result.num = a.num * b.num;
       result.denomination = a.denomination * b.denomination;
       return result;
   }

}

Rational operator/(Rational a, Rational b)
{
   Rational result;

   {
       result.num = a.num * b.denomination;
       result.denomination = a.denomination * b.num;
       return result;
   }

}

ostream& operator << (ostream& out, Rational& r)
{
   out << r.num << " / " << r.denomination;
   return out;
}

void Rational::reduce()
{
   int rnum, i;
   int rdenomination;
   int count;

   if ( num % denomination)
   {
       count = 1;

       while ( count == 1)
       {
           rnum = num;
           rdenomination = denomination;

           for (i=1; i < abs(num); i++)
           {
               if (num % i == 0 && denomination % i == 0)
               {
                   num = num / i;
                   denomination = denomination / i;
               }
           }

           if (( rnum == num) && ( rdenomination == denomination))
               count = 0;
       };
   }

  
   {
       num = num / denomination;
       denomination = denomination / denomination;
   }
}

Rational::Rational( int a, int b)
{
   num = a;
   denomination = b;
}


_________________________________________________

Rational.h

#include <iostream>
#include <fstream>
using namespace std;

class Rational
{
private:
   int num, denomination;

public:
   Rational();
   Rational(int a, int b);
   void assignData( int, int);
   void reduce();

   friend ostream& operator << (ostream& out, Rational& r);
   friend Rational operator+ (Rational r1, Rational r2);
   friend Rational operator* (Rational r1, Rational r2);
   friend Rational operator- (Rational r1, Rational r2);
   friend Rational operator/ (Rational r1, Rational r2);
};

____________________________________________________________

RationalDriver.cpp

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

int main()
{
   Rational t1,t2,t3,t4,r1,r2,r3,r4,r5,r6,r7,r8;
  
   int j = 0,n[10],d[10],n1[10],d1[10],n2[10],d2[10],n3[10],d3[10];

   char sign[4], temp;

   ifstream infile;

   infile.open("Rational.txt");

   while(!infile.eof())
   {
       infile >> n[j];
       infile >> temp;
       infile >> d[j];
       infile >> sign;
       infile >> n2[j];
       infile >> temp;
       infile >> d2[j];

       j = j + 1;
   };

   r1.assignData(n[0],d[0]);

   r2.assignData(n2[0],d2[0]);

   r3.assignData(n[1],d[1]);

   r4.assignData(n2[1],d2[1]);

   r5.assignData(n[2],d[2]);

   r6.assignData(n2[2],d2[2]);

   r7.assignData(n[3],d[3]);

   r8.assignData(n2[3],d2[3]);

   for (j = 0; j < 4; j++)
   {
       switch(sign[j])
       {

       case '+' : t1 = r1 + r2;
           t1.reduce();

           cout << r1 << " + " << r2 << "is ";
           cout << t1 << endl;

           break;

       case '*' : t2 = r3 * r4;
           t2.reduce();

           cout << r3 << " * " << r4 << "is ";
           cout << t2 << endl;

           break;

       case '-' : t3 = r5 - r6;
           t3.reduce();

           cout << r5 << " - " << r6 << "is ";
           cout << t3 << endl;

           break;

       case '/' : t4 = r7 / r8;
           t4.reduce();
          
           cout << r7 << " / " << r8 << "is ";
           cout << t4 << endl;

           break;
       }
   }

   system ("pause");
   return 0;
}

Explanation / Answer

//I changed reduce function logic and it works , I just tested with one expression, I changed that files for +, - , * and / ,it //works fine.. I am just working with r1 and r2,, later pls change you main file accordingly ,, I am providing //Rational.cpp //and main file which I changed, later u can change main to include all expressions in one shot.

//Rational.cpp

#include <fstream>

#include "Rational.h"

using namespace std;

int hcf(int *num, int *den);

void Rational::assignData( int m, int n)

{

num = m;

denomination = n;

}

Rational::Rational()

{

num = 0;

denomination =0;

}

Rational operator+(Rational a, Rational b)

{

Rational result;

if (a.denomination == b.denomination)

{

result.num = a.num + b.num;

result.denomination = a.denomination;

return result;

}

else

{

a.num = a.num * b.denomination;

b.num = b.num * a.denomination;

a.denomination = a.denomination * b.denomination;

//commented below line Chegg EA

//b.denomination = a.denomination * b.denomination;

result.num = a.num + b.num;

result.denomination = a.denomination ;

return result;

}

}

Rational operator-(Rational a, Rational b)

{

Rational result;

if (a.denomination == b.denomination)

{

result.num = a.num - b.num;

result.denomination = a.denomination;

return result;

}

else

{

a.num = a.num * b.denomination;

b.num = b.num * a.denomination;

a.denomination = a.denomination * b.denomination;

b.denomination = a.denomination ;

result.num = a.num - b.num;

result.denomination = a.denomination;

return result;

}

}

Rational operator*(Rational a, Rational b)

{

Rational result;

{

result.num = a.num * b.num;

result.denomination = a.denomination * b.denomination;

return result;

}

}

Rational operator/(Rational a, Rational b)

{

Rational result;

{

result.num = a.num * b.denomination;

result.denomination = a.denomination * b.num;

return result;

}

}

ostream& operator << (ostream& out, Rational& r)

{

out << r.num << " / " << r.denomination;

return out;

}

//Changed logic of this function Chegg EA

void Rational::reduce()

{

int a, b, c;

a = num;

b = denomination;

do

{

c = a%b;

a = b;

b = c;

} while (c != 0);

num = num / a;

denomination = denomination / a;

return ;

}

Rational::Rational( int a, int b)

{

num = a;

denomination = b;

}

---------------------------------------

//main driver

//RationalDriver.cpp

#include <iostream>

#include <fstream>

#include "Rational.h"

using namespace std;

int main()

{

Rational t1, t2, t3, t4, r1, r2, r3, r4, r5, r6, r7, r8;

int j = 0, n[10], d[10], n1[10], d1[10], n2[10], d2[10], n3[10], d3[10];

char sign[4], temp;

ifstream infile;

infile.open("Rational.txt");

while (!infile.eof())

{

infile >> n[j];

infile >> temp;

infile >> d[j];

infile >> sign;

infile >> n2[j];

infile >> temp;

infile >> d2[j];

j = j + 1;

};

r1.assignData(n[0], d[0]);

r2.assignData(n2[0], d2[0]);

/*r3.assignData(n[1], d[1]);

r4.assignData(n2[1], d2[1]);

r5.assignData(n[2], d[2]);

r6.assignData(n2[2], d2[2]);

/*r7.assignData(n[3], d[3]);

r8.assignData(n2[3], d2[3]);*/

for (j = 0; j < 1; j++)

{

switch (sign[j])

{

case '+': t1 = r1 + r2;

t1.reduce();

cout << r1 << " + " << r2 << " is ";

cout << t1 << endl;

break;

case '*': t2 = r1 * r2;

t2.reduce();

cout << r1 << " * " << r2 << " is ";

cout << t2 << endl;

break;

case '-': t3 = r1 - r2;

t3.reduce();

cout << r1 << " - " << r2 << " is ";

cout << t3 << endl;

break;

case '/': t4 = r1 / r2;

t4.reduce();

cout << r1 << " / " << r2 << " is ";

cout << t4 << endl;

break;

}

}

system("pause");

return 0;

}

------------------------------------------------------------

///tested with one expression file Rational.txt, I changed sign every time to test all operations

Rational.txt

2 / 3 + 2 / 8

//for + sign

output:

2 / 3 / 2 / 8 is 11/12

//for - sign

2 / 3 - 2 / 8

output:

2 / 3 / 2 / 8 is 5 / 12

//for * sign

2 / 3 * 2 / 8

output:

2 / 3 / 2 / 8 is 1/6

//for / sign

2 / 3 / 2 / 8

outpt:

2 / 3 / 2 / 8 is 8 / 3

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote