第九周作業3

//【任務3】接第8周任務3,定義分數類中<<和>>運算符重載,實現分數的輸入輸出,改造原程序中對運算結果顯示方式,使程序讀起來更自然。
#include<iostream>

using namespace std;

class CFraction
{
private:
	int nume;  // 分子
	int deno;  // 分母
 public:
	CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){};   //構造函數,初始化用
	void output1();

	friend ostream& operator << (ostream &,CFraction &);
	friend istream& operator >> (istream &,CFraction &);

	CFraction operator+(CFraction &c1);
	CFraction operator-(CFraction &c1);
	CFraction operator*(CFraction &c1);
	CFraction operator/(CFraction &c1);

	CFraction operator-();//取反

	//比較運算符(二目)的重載
	bool operator > (CFraction &c1);
	bool operator < (CFraction &c1);
	bool operator >= (CFraction &c1);
	bool operator <= (CFraction &c1);
	bool operator == (CFraction &c1);
	bool operator != (CFraction &c1);

};

ostream& operator << (ostream &ouput, CFraction &c)
{  
	int i;  
    if(c.deno == 0)  
    cout<<"error"<<endl; 
	if(c.nume >= 0)
	{
		if(c.deno < c.nume)i = c.deno;
	    else i = c.nume;
	    for(; i > 0; --i)
	    {
			if(c.nume % i == 0 && c.deno % i == 0)
		    {
				c.nume = c.nume / i;
			    c.deno = c.deno / i;
			    break;
	        }
         }
	     ouput << c.nume << "/" << c.deno << endl; 
	}
	else 
	{
		c.nume = -c.nume;
		if(c.deno < c.nume)i = c.deno;
	    else i = c.nume;
	    for(; i > 0; --i)
	    {
			if(c.nume % i == 0 && c.deno % i == 0)
		    {
				c.nume = c.nume / i;
			    c.deno = c.deno / i;
			    break;
	        }
         }
	     ouput << -c.nume << "/" << c.deno << endl; 
	}
    return ouput;
}  

istream& operator >> (istream &input, CFraction &c)
{
	char c1;
	cout << "請輸入一個分數(格式:x/y):";
	cin >> c.nume >> c1 >> c.deno;
	do
	{
		if(c1 == '/')break;
		else
		{
			cout << "格式錯誤,請重新輸入一個分數(格式:x/y):";
			input >> c.nume >> c1 >> c.deno;
		}
	}while(1);
	return input;
}

CFraction CFraction :: operator+(CFraction &c1)
{ 
	CFraction c2;  
    c2.deno = deno * c1.deno;  
    c2.nume = nume * c1.deno + c1.nume * deno;  
    return c2;  
}  

CFraction CFraction :: operator-(CFraction &c1)
{  
	CFraction c2;  
    c2.deno = deno * c1.deno;  
    c2.nume = nume * c1.deno - c1.nume * deno;  
    return c2;  
}  

CFraction CFraction :: operator*(CFraction &c1)
{  
	CFraction c2;  
    c2.deno = deno * c1.deno;  
    c2.nume = nume * c1.nume;  
    return c2;  
}  

CFraction CFraction :: operator/(CFraction &c1)
{  
	CFraction c2;  
    c2.deno = deno * c1.nume;  
    c2.nume = nume * c1.deno;  
    return c2;  
}  

CFraction CFraction :: operator-()//取反
{
	CFraction c2; 
	c2.nume = -nume;
	c2.deno = deno;

	return c2;
}

void CFraction :: output1()  
{  
	cout << nume << "/" << deno << endl;  
} 

//比較運算符(二目)的重載
bool CFraction :: operator > (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if(c2.nume > c3.nume)return true;
	else return false;
}

bool CFraction :: operator < (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if(c2.nume < c3.nume)return true;
	else return false;
}

bool CFraction :: operator >= (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if(c2.nume < c3.nume)return false;
	else return true;
}

bool CFraction :: operator <= (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if(c2.nume > c3.nume)return false;
	else return true;
}

bool CFraction :: operator == (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if((c2.nume >= c3.nume) && (c2.nume <= c3.nume))return true;
	else return false;
}

bool CFraction :: operator != (CFraction &c1)
{
	CFraction c2, c3;
	c2.nume = nume * c1.deno;
	c3.nume = c1.nume * deno;
	if((c2.nume > c3.nume) || (c2.nume < c3.nume))return true;
	else return false;
}

void main()
{
	CFraction c1, c2, c3;
	cin >> c1 >> c2;
	cout <<"c1 = ";
	c1.output1();
	cout <<"c2 = ";
	c2.output1();

	c3 = c1 + c2;
	cout << "c1 + c2 = " << c3;
    
	c3 = c1 - c2;
	cout << "c1 - c2 = " << c3;

	c3 = c1 * c2;
	cout << "c1 * c2 = " << c3;

	c3 = c1 / c2;
	cout << "c1 / c2 = " << c3;

	c3 = -c1;
	cout << "-c1 = " << c3;

	cout << endl;
	
	cout<<"下面比較兩個分數的大小:\n";
	if (c1 > c2) cout << "c1 > c2" << endl;
	if (c1 < c2) cout << "c1 < c2" << endl;
	if (c1 == c2) cout << "c1 = c2" << endl; 
	if (c1 != c2) cout << "c1 ≠ c2" << endl;
	if (c1 >= c2) cout << "c1 ≥ c2" << endl;
	if (c1 <= c2) cout << "c1 ≤ c2" << endl;
	cout<<endl;
    

	system("pause");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章