//Engr. Ahmad Furqan Attari
//Chapter 6, Problem 11
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <cmath>
using namespace std;
class fraction
{
private:
int num, den;
public:
fraction()
{}
fraction(int n, int d) :num(n), den(d)
{
lowterms();
}
void take_frac(void)
{
char ch;
cin >> num >> ch >> den;
}
void show_frac(void)
{
cout << setw(2)<<num << "/" <<setw(2)<< 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)
{
int den;
fraction f[9],res;
do
{
cout << "Enter a denominator(<10): ";
cin >> den;
} while (den > 9);
cout << " ";
for (int i = 0; i < den-1; i++)
{
f[i] = { i + 1, den };
f[i].show_frac();
cout << " ";
}
for (int i = 0; i < den - 1; i++)
{
cout << endl;
f[i].show_frac();
cout << " ";
for (int j = 0; j < den - 1; j++)
{
res.mul_frac(f[i], f[j]);
res.show_frac();
cout << " ";
}
}
_getch();
}
Friday, 28 November 2014
Chapter 6,Problem 12:Object Oriented Programming by Robert Lafore in C++ Solution Manual
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment