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