Re: 計程第2題
看板ZooStudy作者stradivaris (Bach's Largo..........)時間21年前 (2003/01/03 22:50)推噓1(1推 0噓 0→)留言1則, 1人參與討論串1/1
我的應該可以跑:
//rationalnumber.h
#ifndef RATIONALNUMBER_H
#define RATIONALNUMBER_H
#include<iostream>
using std::ostream ;
using std::istream ;
class rationalnumber
{
friend ostream &operator<<(ostream &,const rationalnumber &);
public:
rationalnumber(int=0,int=1);
rationalnumber operator+(const rationalnumber&) ;
rationalnumber operator-(const rationalnumber&) ;
rationalnumber operator*(const rationalnumber&) ;
rationalnumber operator/(const rationalnumber&) ;
const rationalnumber &operator=(const rationalnumber&);
bool operator==(rationalnumber &);
bool operator>(rationalnumber &);
bool operator<(rationalnumber &);
void reducedfraction(int,int);
private:
int nu;
int de;
};
#endif
//rationalnumber.cpp
#include <iostream>
using std::cout;
using std::cin;
#include"rationalnumber.h"
rationalnumber::rationalnumber(int n,int d)
{
if(d<0)
{
cout<<"invalid denominator imput\nset denominator to 1";
d=1;
}
reducedfraction(n,d);
}
void rationalnumber::reducedfraction(int n,int d)
{
int small,m;
if(n!=0)
{
if(n<0)
m=(-1)*n;
else
m=n;
if(m>d)
small=d;
else
small=m;
for(;m%small!=0 || d%small!=0;small--)
;
nu=m/small;
if(n<0)
nu*=(-1);
de=d/small;
}
else
{nu=n;
de=d;}
}
ostream &operator<<(ostream &output, const rationalnumber &A)
{
output<<A.nu <<"/" <<A.de ;
return output;
}
rationalnumber rationalnumber::operator +(const rationalnumber &operand2)
{
return rationalnumber(nu*operand2.de+de*operand2.nu,de*operand2.de);
}
rationalnumber rationalnumber::operator -(const rationalnumber &operand2)
{
return rationalnumber(nu*operand2.de-de*operand2.nu,de*operand2.de);
}
rationalnumber rationalnumber::operator *(const rationalnumber &operand2)
{
return rationalnumber(nu*operand2.nu,de*operand2.de);
}
rationalnumber rationalnumber::operator /(const rationalnumber &operand2)
{
if(de*operand2.nu!=0)
return rationalnumber(nu*operand2.de,de*operand2.nu);
else
cout<<"The denominator here is invalid(0) , set it to 1\n";
return rationalnumber(nu*operand2.de,1);
}
const rationalnumber& rationalnumber::operator=(const rationalnumber &right)
{
nu=right.nu;
de=right.de;
return *this;
}
bool rationalnumber::operator==(rationalnumber &a)
{
if(nu!=0 || a.nu !=0)
return(nu==a.nu && de==a.de );
else
return true;
}
bool rationalnumber::operator >(rationalnumber &a)
{
rationalnumber r=(*this)-a;
return(r.nu>0 && r.de > 0);
}
bool rationalnumber::operator <(rationalnumber &a)
{
rationalnumber r=(*this)-a;
return(r.nu<0 || r.de < 0);
}
//main.cpp
#include <iostream>
using std::ostream;
using std::istream;
using std::cout;
using std::cin;
using std::endl;
#include"rationalnumber.h"
int main()
{
rationalnumber r1(1,4),r2(0,6),k;
cout<<"r1="<<r1;
cout<<"\nr2="<<r2<<endl;
k=r1+r2;
cout<<"k=r1+r2="<<k<<endl;
k=r1-r2;
cout<<"k=r1-r2="<<k<<endl;
k=r1*r2;
cout<<"k=r1*r2="<<k<<endl;
k=r1/r2;
cout<<"k=r1/r2="<<k<<endl;
if(r1==r2)
cout<<"r1=r2"<<endl;
if(r1>r2)
cout<<"r1>r2"<<endl;
if(r1<r2)
cout<<"r1<r2"<<endl;
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 61.226.135.64
推
推 61.226.114.8 01/04, , 1F
推 61.226.114.8 01/04, 1F