第5週の上機実践項目——点数類の雛形

3233 ワード

/*
*            :
*Copyright(c)2014,           
*All rights reserved.
*    :        
*  :   
*    :2013  3  25  
*   :v1.0
*             :
*    :   
*    :             
*    :           
*    :
*    :
*/
#include <iostream>
#include <cstdlib>
using namespace std;
class CFraction
{
private:
    int nume;  //   
    int deno;  //   
public:
    CFraction(int nu=0,int de=1):nume(nu),deno(de){}   //    ,    
    void set(int nu=0,int de=1);    //  ,     
    void input();	 //  "nu/de"   , "5/2"     
    void simplify();	 //  (          )
    void amplify(int n);	 //  n , 2/3  5  10/3
    void output(int style=0);	//  : 8/6  ,style 0 ,    8/6;
                                //style 1 ,       4/3;
                                //style 2 ,  1(1/3)  ,        ;
                                //style 3 ,       , 1.3333;
                                //    0
};
void CFraction::set(int nu,int de)
{
	nume=nu;
	deno=de;
}
void CFraction::input()
{
    int nu,de;
	char a;
	cin>>nu>>a>>de;
	set(nu,de);
}
void CFraction::simplify()
{
    int i,t;
	if(nume>deno)
	{
		t=nume;
	}else
	{
		t=deno;
	}
	for(i=2;i<=t;i++)
	{
		while(nume%i==0&&deno%i==0)
		{
			nume/=i;
			deno/=i;
		}
	}
}
void CFraction::amplify(int n)
{
	nume*=n;
}
void CFraction::output(int style)
{
	int n;
	if(style==0)
	{
		cout<<nume<<"/"<<deno<<endl;
	}else if(style==1)
	{
		n=nume/deno;
		nume=nume-n*deno;
		cout<<n<<"("<<nume<<"/"<<deno<<")"<<endl;
	}else
	{
		cout<<double(nume)/double(deno)<<endl;
	}
}
int main()
{
	CFraction cf;
	int n,num;
	cout<<"   "<<"nu/de"<<"   , "<<"5/2"<<"     :"<<endl;
	cf.input();
	while(true)
	{
		cout<<"       :"<<endl;
		cout<<"1.    .        2.     ."<<endl;
		cout<<"3.  N    .   4.        "<<endl;
		cout<<"5.          0.  ."<<endl;
		cin>>n;
		switch(n)
		{
		case 0:
			exit(0);
		case 1:
			cf.output();
			break;
		case 2:
			cf.simplify();
			cf.output();
			break;
		case 3:
			cout<<"       :"<<endl;
			cin>>num;
			cf.amplify(num);
			cf.output();
			break;
		case 4:
			cf.output(1);
			break;
		case 5:
			cf.output(2);
			break;
		default:
			cout<<"    ,     :"<<endl;
			cin>>n;
		}
	}
	return 0;
}

*サンプル出力:
*心得:兄弟がいて、孤独ではありません.