精華區beta ck54th329 關於我們 聯絡資訊
---------------------------------rational.h---------------------------------- #ifndef RATIONAL_H #define RATIONAL_H class Rational{ public: Rational(); void setRational(int,int); Rational addition(Rational,Rational); Rational subtraction(Rational,Rational); Rational multiplication(Rational,Rational); Rational division(Rational,Rational); void printfraction(); void printfloat(); private: int calgcd(int,int); int numerator; int denominator; }; #endif --------------------------------rational.cpp--------------------------------- #include<iostream> using std::cin; using std::cout; using std::endl; #include<cmath> #include "Rational.h" Rational::Rational(){numerator=denominator=1;} void Rational::setRational(int n,int d) { if (d==0){ cout<<"denominator can't be zero!!"<<endl; return; } if (n*d<0) { n=-fabs(n); d=fabs(d); } else { n=fabs(n); d=fabs(d); } int gcd=calgcd(fabs(n),fabs(d)); numerator=n/gcd; denominator=d/gcd; } Rational Rational::addition(Rational a,Rational b) { int n=a.numerator*b.denominator+b.numerator*a.denominator; Rational c; c.setRational(n,a.denominator*b.denominator); return c; } Rational Rational::subtraction(Rational a,Rational b) { int n=a.numerator*b.denominator-b.numerator*a.denominator; Rational c; c.setRational(n,a.denominator*b.denominator); return c; } Rational Rational::multiplication(Rational a,Rational b) { Rational c; c.setRational(a.numerator*b.numerator,a.denominator*b.denominator); return c; } Rational Rational::division(Rational a,Rational b) { Rational c; c.setRational(a.numerator*b.denominator,a.denominator*b.numerator); return c; } void Rational::printfraction() { cout<<numerator<<"/"<<denominator; } void Rational::printfloat() { cout<<static_cast<float>(numerator)/denominator; } int Rational::calgcd(int d1,int d2) { int tem; while(d1){ tem=d1; d1=d2%d1; d2=tem; } return d2; } /////////////////////////////////////////////////////////////////////// int main() { int an,ad,bn,bd; Rational fa,fb; cout<<"Please enter one fraction fa (numerator-denominator)."<<endl; cin>>an>>ad; fa.setRational(an,ad); cout<<"Please enter another fraction fb (numerator-denominator)."<<endl; cin>>bn>>bd; fb.setRational(bn,bd); cout<<"fa = ";fa.printfraction();cout<<endl; cout<<"fb = ";fb.printfraction();cout<<endl; int c; do{ Rational fc; cout<<"Enter a choice:"<<endl; cout<<" 0 Caculate fa + fb "<<endl; cout<<" 1 Caculate fa - fb "<<endl; cout<<" 2 Caculate fa * fb "<<endl; cout<<" 3 Caculate fa / fb "<<endl; cout<<" 4 Print fa in floating-point format"<<endl; cout<<" 5 Print fb in floating-point format"<<endl; cout<<" 6 End program"<<endl; cin>>c; switch(c){ case 0: fa.printfraction();cout<<" + ";fb.printfraction();cout<<" = "; fc=fc.addition(fa,fb);fc.printfraction();cout<<endl;break; case 1: fa.printfraction();cout<<" - ";fb.printfraction();cout<<" = "; fc=fc.subtraction(fa,fb);fc.printfraction();cout<<endl;break; case 2: fa.printfraction();cout<<" * ";fb.printfraction();cout<<" = "; fc=fc.multiplication(fa,fb);fc.printfraction();cout<<endl;break; case 3: fa.printfraction();cout<<" / ";fb.printfraction();cout<<" = "; fc=fc.division(fa,fb);fc.printfraction();cout<<endl;break; case 4: fa.printfraction();cout<<" = ";fa.printfloat();cout<<endl;break; case 5: fb.printfraction();cout<<" = ";fb.printfloat();cout<<endl;break; } }while(c!=6); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: 61.224.133.26