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

C++ i have this code when i try to do a makefile it does not work! can anybody p

ID: 3664981 • Letter: C

Question

C++ i have this code when i try to do a makefile it does not work! can anybody put it in files or tell me why it does not compile when i try to do a mkefile?

//Rational.h header file declaration
#ifndef Rational_H
#define Rational_H
#include<iostream>
using namespace std;
//Rational class defintion
class Rational
{
public:

   Rational(int numerator, int denominator);//construtor
   Rational();//defacult constuctor
  
   //member functions of class Rational
   Rational operator+(Rational &r); //for addition
   Rational operator-(Rational &r);//for subtraction
   Rational operator*(Rational &r);//for multiplication
   Rational operator/(Rational &r);//for division

   //overload <.<=,>,>= opeators
   int operator<(Rational &r);
   int operator<=(Rational &r);
   int operator>(Rational &r);
   int operator>=(Rational &r);


   //overload << and >> operators
   friend istream &operator>>( istream &input, Rational &r );
   friend ostream &operator<<( ostream &output, Rational &r );

   //gcd function to normalize the rational number
   Rational gcd(Rational &rational);  
private:
   //private members of Rational class
   int numerator, denominator;  
};
#endif Rational_H

----------------------------------------------------------------------------------------------------
//Implementaion file

//Rational.cpp
#include<iostream>
#include<iomanip>
#include<math.h>
#include "Rational.h"
using namespace std;
//Constructor to set numerator and denominator to default to 0 and 1
//for numerator and denominator
Rational::Rational()
{
   numerator = 0;
   denominator = 1;
}
//Parameterized constructor
Rational::Rational(int num , int den)
{
   numerator = num;
   denominator = den;
}
//All methods of Rational class add,sub ,div and mul that accepts teh Rational object as input argumnts
//Addition of two fractions
Rational Rational::operator+(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator+denominator*r.numerator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;

   return gcd(Rational(result.numerator,result.denominator));
}
//Subtractions of two fractions
Rational Rational::operator-(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator - numerator*r.denominator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;
   return gcd(Rational(result.numerator,result.denominator));
}

//Divsion of two fractions
Rational Rational::operator/(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator;
   result.numerator=n;
   int d = denominator*r.numerator;
   result.denominator=d;

   return gcd(Rational(result.numerator,result.denominator));
}

//Multiplication of two fractions
Rational Rational::operator*(Rational &r)
{
   Rational result;
   int n= numerator*r.numerator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;

   return gcd(Rational(result.numerator,result.denominator));
}
/* Find GCD of two numbers */
Rational Rational::gcd(Rational &rational)
{
   double numerator = abs(rational.numerator);
   double denominator = abs(rational.denominator);
   int gcd = 1;

   for (int k = 1; k <= denominator && k <= denominator; k++)
   {
       if (rational.numerator % k == 0 && rational.denominator % k == 0)
           gcd = k;
   }

   //Return Rational number in smallest form of Rational number
   return Rational(numerator/gcd,denominator/gcd);
}

//Returns 1 if rational , r is less than the Rational class object
int Rational::operator<(Rational &r)
{
   if((numerator/denominator)<(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Returns 1 if rational , r is less than the Rational class object
int Rational::operator<=(Rational &r)
{
   if((numerator/denominator)<=(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Returns 1 if rational , r is greater than the Rational class object
int Rational::operator>(Rational &r)
{
   if((numerator/denominator)>(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}
//Returns 1 if rational , r is greater than or equal to the Rational class object
int Rational::operator>=(Rational &r)
{
   if((numerator/denominator)>=(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Overload insertion operator to read input
istream &operator>>( istream &input, Rational &r )
{
   //to read a operator character
   //and then ignore ignore the operator
   char ch;  
   input>>r.numerator;
   cin>>ch;
   input>>r.denominator;  
   return input;
}

//Overload extraction operator to print output
ostream &operator<<( ostream &output, Rational &r )
{  
   if(r.numerator==0)
       output<< r.numerator<<endl;
   else if(r.numerator==1 && r.denominator==1)
       output<< r.numerator<<endl;
   else
       output<< r.numerator<<"/"<<r.denominator;

   return output;

}

-----------------------------------------------------------------------------------------------------------------------------------------------
//Driver program
//main.cpp

//C++ test program for Rational class +,-,/,*,<,<=,>.>=   ovrerloaded operator
//methods and prints the corresponding resutls to the console screen
#include<iostream>
//include Rational header file
#include "Rational.h"
using namespace std;
int main(void)
{

   //Create two objects r1,r2 of Rational class
   Rational r1,r2;
  
   cout<<"Rational : "<<endl;
   cin>>r1;

   cout<<"Rationa2 : "<<endl;
   cin>>r2;

   cout<<"Addition: "<<(r1+r2)<<endl;
   cout<<"Subtraction: "<<(r1-r2)<<endl;
   cout<<"Division: "<<(r1+r2)<<endl;
   cout<<"Multiplication: "<<(r1*r2)<<endl;


   if(r1<r2)
       cout<<"r1<r2"<<endl;
   if(r1<=r2)
       cout<<"r1<=r2"<<endl;
  

   if(r1>r2)
       cout<<"r1>r2"<<endl;
  


   if(r1<=r2)
       cout<<"r1<=r2"<<endl;
  
   //pause the program output
   system("pause");
   return 0;
}

Explanation / Answer

I have change some code in HEADER AND IMPLEMENTATION FILE, its given in bold. after these changes compilation should work.

Header file:

class Rational
{
public:

   Rational(int numerator, int denominator);//construtor
   Rational();//defacult constuctor

   //member functions of class Rational
   Rational operator+(Rational &r); //for addition
   Rational operator-(Rational &r);//for subtraction
   Rational operator*(Rational &r);//for multiplication
   Rational operator/(Rational &r);//for division

   //overload <.<=,>,>= opeators
   int operator<(Rational &r);
   int operator<=(Rational &r);
   int operator>(Rational &r);
   int operator>=(Rational &r);


   //overload << and >> operators
   friend istream &operator>>( istream &input, Rational r );
friend ostream &operator<<( ostream &output, Rational r);

   //gcd function to normalize the rational number
   Rational gcd(Rational &rational);
private:
   //private members of Rational class
   int numerator, denominator;
}

IMPLEMENTATION FILE

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

Rational::Rational()
{
   numerator = 0;
   denominator = 1;
}
//Parameterized constructor
Rational::Rational(int num , int den)
{
   numerator = num;
   denominator = den;
}
//All methods of Rational class add,sub ,div and mul that accepts teh Rational object as input argumnts
//Addition of two fractions
Rational Rational::operator+(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator+denominator*r.numerator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;
   //return gcd(Rational(result.numerator,result.denominator));
   Rational result1(result.numerator,result.denominator);
   return gcd(result1);

}
//Subtractions of two fractions
Rational Rational::operator-(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator - numerator*r.denominator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;
     Rational result1(result.numerator,result.denominator);
   return gcd(result1);
   //return gcd(Rational(result.numerator,result.denominator));

}

//Divsion of two fractions
Rational Rational::operator/(Rational &r)
{
   Rational result;
   int n= numerator*r.denominator;
   result.numerator=n;
   int d = denominator*r.numerator;
   result.denominator=d;
   Rational result1(result.numerator,result.denominator);
   return gcd(result1);
   //return gcd(Rational(result.numerator,result.denominator));

}

//Multiplication of two fractions
Rational Rational::operator*(Rational &r)
{
   Rational result;
   int n= numerator*r.numerator;
   result.numerator=n;
   int d = denominator*r.denominator;
   result.denominator=d;
      Rational result1(result.numerator,result.denominator);
   return gcd(result1);

   //return gcd(Rational(result.numerator,result.denominator));
}
/* Find GCD of two numbers */
Rational Rational::gcd(Rational &rational)
{
   double numerator = abs(rational.numerator);
   double denominator = abs(rational.denominator);
   int gcd = 1;

   for (int k = 1; k <= denominator && k <= denominator; k++)
   {
       if (rational.numerator % k == 0 && rational.denominator % k == 0)
           gcd = k;
   }

   //Return Rational number in smallest form of Rational number
   return Rational(numerator/gcd,denominator/gcd);
}

//Returns 1 if rational , r is less than the Rational class object
int Rational::operator<(Rational &r)
{
   if((numerator/denominator)<(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Returns 1 if rational , r is less than the Rational class object
int Rational::operator<=(Rational &r)
{
   if((numerator/denominator)<=(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Returns 1 if rational , r is greater than the Rational class object
int Rational::operator>(Rational &r)
{
   if((numerator/denominator)>(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}
//Returns 1 if rational , r is greater than or equal to the Rational class object
int Rational::operator>=(Rational &r)
{
   if((numerator/denominator)>=(r.numerator/r.denominator))
       return 1;
   else
       return 0;
}

//Overload insertion operator to read input
istream &operator>>( istream &input, Rational r )
{
   //to read a operator character
   //and then ignore ignore the operator
   char ch;
   input>>r.numerator;
   cin>>ch;
   input>>r.denominator;
   return input;
}

//Overload extraction operator to print output
ostream &operator<<( ostream &output, Rational r )
{
   if(r.numerator==0)
       output<< r.numerator<<endl;
   else if(r.numerator==1 && r.denominator==1)
       output<< r.numerator<<endl;
   else
       output<< r.numerator<<"/"<<r.denominator;

   return output;

}

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