// // // // // // // // // //
***************************************************************** * Program Name: Mixed Numbers Program * Class: COP3330 * Description: This program allows for storage of rational numbers in * a mixed number format and allows for both positive and negative * mixed number values. A zero in the denominator of the fraction part * constitutes an illegal number and is not allowed. * FinishDate (startdate): 2/7/2012 (2/14/2012) * Author: Richard Ramsey Rodriguez *****************************************************************
#include <iostream> #include "mixed.h" using namespace std; Mixed::Mixed(int a) { if(setvalue(a,0,1)) {wholenum=a; numerator=0; denominator=1;} else if( numerator<0 && wholenum<0) {wholenum=0; numerator=0; denominator=1;} } Mixed::Mixed(int p, int n, int d) { if(setvalue(p,n,d)==true) { wholenum=p; numerator=n; denominator=d; } else { wholenum=0; numerator=0; denominator=0;} } int Mixed::GetWholeNum() { return wholenum; } int Mixed::GetNumerator() const { return numerator; } int Mixed::GetDenominator() const { return denominator; } bool Mixed::setvalue(int p, int n, int d) { if(d==0||n<0&&p<0) return false; else return true; }
//mutators double Mixed::Evaluate() { double p = wholenum; double n = numerator; double d = denominator; if ( p < 0 ) { return ( p - n / d ); } else { return ( p + n / d ); } } int Mixed::ToFraction() { if( wholenum<0) numerator= wholenum * denominator - numerator; else if ( wholenum > 0) numerator = wholenum * denominator + numerator; wholenum=0; } void Mixed::Simplify() { if(numerator/denominator!=0) {if(wholenum<0) {wholenum+=(-numerator/denominator);} else wholenum+= (numerator/denominator); numerator= numerator%denominator; if(numerator<0 && wholenum!=0) numerator=numerator*(-1); } int n=numerator; int d=denominator; int f; //for factor if(d>n) {for(f=d;f>=2;f--) {if(n%f==0 && d%f==0) {numerator/=f; denominator /= f;} } } else if(n>d) {for(f=n;f>=2;f--) {if(n%f==0 && d%f==0) {numerator/=f; denominator /= f;} } } } //Operators Stand-Alone Mixed operator+(const Mixed& x, const Mixed& y) { Mixed r; // result int temp, temp2;
int temp3,temp4; temp= ([Link]*[Link])+[Link]; temp2= ([Link]*[Link])+[Link]; temp3= temp*[Link]; temp4= temp2*[Link]; [Link] = ([Link] * [Link]); [Link]=(temp3+temp4); [Link](); return r; } Mixed operator-(const Mixed& x, const Mixed& y) { Mixed r; // result int temp, temp2; int temp3,temp4; temp= ([Link]*[Link])+[Link]; temp2= ([Link]*[Link])+[Link]; temp3= temp*[Link]; temp4= temp2*[Link]; [Link]=(temp3-temp4); [Link] = ([Link] * [Link]); [Link](); return r; } Mixed operator*(const Mixed& x, const Mixed& y) { Mixed r; int temp, temp2; int temp3,temp4; temp= ([Link]*[Link])+[Link]; temp2= ([Link]*[Link])+[Link]; [Link]=(temp*temp2); [Link]= [Link]* [Link]; [Link](); return r; } Mixed operator/(const Mixed& x, const Mixed& y) { Mixed r; int temp; int temp2; temp=[Link]*[Link]+[Link]; temp2=[Link]*[Link]+[Link]; [Link]= temp * [Link]; [Link]=[Link]*temp2; [Link](); return r; } //bool operators bool Mixed::operator==(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator;
return(temp==temp2); } bool Mixed::operator<(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator; return(temp<temp2); } bool Mixed::operator>(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator; return(temp>temp2); } bool Mixed::operator!=(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator; return(temp!=temp2); } bool Mixed::operator<=(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator; return(temp<=temp2); } bool Mixed::operator>=(Mixed& f) { int temp; int temp2; temp=(wholenum*denominator+numerator)*[Link]; temp2=([Link]*[Link]+[Link])*denominator; return(temp>=temp2); }
ostream& operator<<(ostream& os, const Mixed& f) { if ([Link] == 0) return (os << [Link]); if ([Link] == 0) return (os << [Link]<< "/"<< [Link]); os << [Link] << " " << [Link]<< "/" << [Link]; return os; } istream& operator>>(istream& is, Mixed& f) { char slash; is >> [Link] >> [Link] >> slash>> [Link]; return is; } Mixed& Mixed::operator++() { wholenum = wholenum + 1; return *this; } // pre-fix increment // increment the real part // return reference to calling object
Mixed Mixed::operator++(int) // post-fix increment { Mixed temp = *this; // copy current object to temp wholenum = wholenum + 1; // increment return temp; // return OLD value } Mixed& Mixed::operator--() { wholenum = wholenum - 1; return *this; } // pre-fix decrement // decrement the real part // return reference to calling object
Mixed Mixed::operator--(int) { Mixed temp = *this; // copy current object to temp wholenum = wholenum - 1; // decrement return temp; // return OLD value }