SHARE
SPREAD
HELP

The Tradition of Sharing

Help your friends and juniors by posting answers to the questions that you know. Also post questions that are not available.


To start with, Sr2Jr’s first step is to reduce the expenses related to education. To achieve this goal Sr2Jr organized the textbook’s question and answers. Sr2Jr is community based and need your support to fill the question and answers. The question and answers posted will be available free of cost to all.

 

#
Authors:
Walter Savitch ,kenrick Mock
Chapter:
Structures And Classes
Exercise:
Programming Projects
Question:5 | ISBN:9780132846813 | Edition: 5

Question

Define a class for a type called Fraction . This class is used to represent a ratio of two integers. Include mutator functions that allow the user to set the numera- tor and the denominator. Also include a member function that returns the value of the numerator divided by the denominator as a double. Include an additional member function that outputs the value of the fraction reduced to lowest terms. For example, instead of outputting 20/60 the function should output 1/3. This will require finding the greatest common divisor for the numerator and denominator, and then dividing both by that number. Embed your class in a test program.


TextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbook

Answer

// Fraction.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class Fraction
{
public:
	Fraction()
	{
	}
	Fraction(int n1,int d1)
	{
		numerator=n1;
		denominator=d1;
	}
	void setNumerator(int n1)
	{ 
		numerator=n1;
	}
	void setDenominator(int d1)
	{ 
		denominator=d1;
	}
	double getNumerator()
	{
		return (double)numerator;
	}
	double getDenominator()
	{ 
		return (double)denominator;
	}
	double getValue()
	{ 
		return ((double)numerator)/denominator ;
	}
    void reducedFraction()
	{
		int gcd = GCD(numerator,denominator);
		cout<<(numerator/gcd)<<"/"<<(denominator/gcd)<<endl;
	}
	Fraction add(Fraction fa)
	{
		Fraction fr2;
		fr2.denominator=this->denominator * fa.denominator;
		fr2.numerator=this->numerator * fa.denominator + this->denominator * fa.numerator;
		return fr2;
	}
	Fraction subtract(Fraction fs)
	{
		Fraction f2;
		f2.denominator = this->denominator * fs.denominator;
		f2.numerator = this->numerator * fs.denominator - this->denominator * fs.numerator;
		return f2;
	}
	Fraction multiply(Fraction fm)
	{
		Fraction f2;
		f2.denominator=this->denominator * fm.denominator;
		f2.numerator=this->numerator * fm.numerator;
		return f2;
	}
	Fraction divide(Fraction fd)
	{
		Fraction f2;
		f2.denominator=this->denominator * fd.numerator;
		f2.numerator=this->numerator * fd.denominator;
		return f2;
	}
	int GCD(int num,int den)
	{
		if(den==0)
			return num;
		else if(den>num)
			return GCD(den,num);
		else
			return GCD(den,num%den);
	}
private:
	int numerator;
	int denominator;
}; 
int main()
{
	Fraction f1(20,60);
	Fraction f2;
	f2.setNumerator(45);
	f2.setDenominator(25);
	cout<<"\nFraction 1: ";
	cout<<f1.getNumerator()<<"/"<<f1.getDenominator()<<endl;
	cout<<"Fraction 2: ";
	cout<<f2.getNumerator()<<"/"<<f2.getDenominator()<<endl<<endl;
	cout<<"Reduced value of fraction 1: ";
	f1.reducedFraction();
	cout<<"Reduced value of fraction 2: ";
	f2.reducedFraction();
	Fraction f3(30,40);
	Fraction f4;
	f4.setNumerator(77);
	f4.setDenominator(122);
	cout<<"\nFraction 3: ";
	cout<<f3.getNumerator()<<"/"<<f3.getDenominator()<<endl;
	cout<<"Fraction 4: ";
	cout<<f4.getNumerator()<<"/"<<f4.getDenominator()<<endl<<endl;
	Fraction f5= f3.add(f4);
	cout<<"Addition		:";
	f5.reducedFraction();
	f5= f3.subtract(f4);
	cout<<"Subtraction	:";
	f5.reducedFraction();
	f5= f3.multiply(f4);
	cout<<"Multiplication	:";
	f5.reducedFraction();
	f5= f3.divide(f4);
	cout<<"Division		:";
	f5.reducedFraction();
	getchar();
	return 0;
}

OUTPUT:

0 0

Discussions

Post the discussion to improve the above solution.