---------------------------------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