FracTable.cpp

//FracTable

#include <iostream>
#include <cmath>
#include <conio.h> //required for getch()
#include <iomanip> //required for setw()
using namespace std;

class fraction //fraction class

private:
int num,den;
public:

fraction(): num(0),den(0)}

fraction(int n,int d):num(n),den(d) }

void display() cout<<num<<"/";cout.setf(ios::left);cout<<setw(4)<<den;}


fraction mult(fraction&, fraction&);

void dispheader()
cout <<num <<"/";cout.setf(ios::left);cout<<setw(4)<<den;}

void lowterms();

};


//----------------------Source copy from textbook----------------------------


void fraction::lowterms() // 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 0/n

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 tden

while(tnum != 0)

if(tnum < tden) // ensure numerator larger

temp = tnum; tnum = tden; tden = temp; //swam them
}
tnum = tnum - tden; // subtract them
}
gcd = tden; // this is greates comon divisor
num = num / gcd; // divide both num and den by gcd
den = den / gcd; // to reduce frac to lowest terms
}


//-----------------------End of source copy from textbook-------------------

int get_den() //get denominator from user


int valid =2;
int denom;
cout<< "Enter a denominator:a ";
cin>>denom; cout<<endl;
if (denom < valid)
do //loop until valid entry

cout<< "Invalid entry. Try again."<<endl;
cout<< "Enter a denominator:a " ;
cin>> denom; cout<<endl;
}
while(denom < valid);

return denom;
}
/*----------------------------------------------------------------*/
fraction fraction::mult(fraction& x,fraction& y)


fraction temp;

temp.num = x.num * y.num;
temp.den = x.den * y.den;

return temp;
}
/*----------------------------------------------------------------*/
int main()


int atemp,btemp,din;
int headmax(8);
int dashmax(7);



din=(get_den());
cout<<setw(headmax)<<" ";


for (atemp=1; atemp < din ; atemp++)

fraction x(atemp,din);
x.lowterms();
x.dispheader();

}
cout <<endl;
for (int temp = 1; temp <(din*dashmax); temp++)

cout<<"-";
}



for (atemp=1; atemp < din ; atemp++)

fraction x(atemp,din);
cout<<endl;

if (atemp < din)

x.lowterms();
x.display();
cout<<"| ";
}
for (btemp=1; btemp < din; btemp++)

fraction y(btemp,din);

fraction z= z.mult(x,y);

z.lowterms();
z.display();
}


}





cout<< endl<< "Press any key to terminate program.a";
getch(); //keep window open until key pressed

return 0;
}










Category: Miscellaneous