//Engr. Ahmad Furqan Attari
//Chapter 6, Problem 11
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
class fraction
{
private:
int num, den;
public:
fraction()
{}
fraction(int n, int d):num(n), den(d)
{
}
void take_frac(void)
{
char ch;
cin >> num >> ch >> den;
}
void show_frac(void)
{
cout << num << "/" << den;
}
void lowterms(void) // change ourself to lowest terms
{
long tnum, tden, temp, gcd;
tnum = labs(num); // use non-negative copies
tden = labs(den); // (needs cmath)
if (tden == 0) // check for n/0
{
cout << "Illegal fraction : division by 0"; exit(1);
}
else if (tnum == 0) // check for 0/n
{
num = 0; den = 1; return;
}
// this ‘while’ loop finds the gcd of tnum and tden
while (tnum != 0)
{
if (tnum < tden) // ensure numerator larger
{
temp = tnum; tnum = tden; tden = temp;
} // swap them
tnum = tnum - tden; // subtract them
}
gcd = tden; // this is greatest common divisor
num = num / gcd; // divide both num and den by gcd
den = den / gcd; // to reduce frac to lowest terms
}
void add_frac(fraction a,fraction b)
{
num = a.num*b.den + a.den*b.num;
den = a.den*b.den;
lowterms();
}
void sub_frac(fraction a,fraction b)
{
num = a.num*b.den - a.den*b.num;
den = a.den*b.den;
lowterms();
}
void mul_frac(fraction a,fraction b)
{
num = a.num*b.num;
den = a.den*b.den;
lowterms();
}
void div_frac(fraction a, fraction b)
{
num = a.num*b.den;
den = a.den*b.num;
lowterms();
}
};
void main(void)
{
fraction a, b, c,d,e,f;
char ch;
do
{
cout << "Enter fraction a: ";
a.take_frac();
cout << "Enter fraction b: ";
b.take_frac();
c.add_frac(a, b);
a.show_frac();
cout << " + ";
b.show_frac();
cout << " = ";
c.show_frac();
cout << endl;
d.sub_frac(a, b);
a.show_frac();
cout << " - ";
b.show_frac();
cout << " = ";
d.show_frac();
cout << endl;
e.mul_frac(a, b);
a.show_frac();
cout << " * ";
b.show_frac();
cout << " = ";
e.show_frac();
cout << endl;
f.div_frac(a, b);
a.show_frac();
cout << " % ";
b.show_frac();
cout << " = ";
f.show_frac();
cout << endl << "Enter again? (y/n): ";
ch = _getche();
cout << endl;
} while (ch != 'n');
}
Friday, 28 November 2014
Chapter 6,Problem 11:Object Oriented Programming by Robert Lafore in C++ Solution Manual
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment