/*
* Copyright (c) 2011, 煙臺大學計算機學院
* All rights reserved.
* 作 者:王靜
* 完成日期:2013 年 4 月 2 日
* 版 本 號:v1.0
* 輸入描述:
* 問題描述:
* 程序輸出:
* 問題分析:
* 算法設計:略
*/
#include<iostream>
#include<cmath>
using namespace std;
class CFraction
{private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu=0,int de=1); //構造函數,初始化用
void set(int nu=0,int de=1); //置值,改變值時用
void input(); //按照"nu/de"的格式,如"5/2"的形式輸入
void simplify(); //化簡(使分子分母沒有公因子)
void simplify1(); //化簡輸出1(1/3)形式,表示一又三分之一;
void amplify(int n); //放大n倍,如2/3放大5倍爲10/3
void output(int style); //輸出:以8/6爲例,style爲0時,原樣輸出8/6;
};
CFraction::CFraction(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::set(int nu,int de) //置值,改變值時用
{
nume=nu;
deno=de;
}
void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式輸入
{
char c;
do{
cout<<"請按照nu/de的格式輸入分子與分母"<<endl;
cin>>nume>>c>>deno;
if(c!='/')
cout<<"輸入錯誤,請重新輸入"<<endl;
}while(c!='/');
}
void CFraction::simplify() //化簡(使分子分母沒有公因子)
{
int i,n=1;
int num,den;
if(nume>deno){
for(i=2;i<=deno;i++){
if(nume%i==0&&deno%i==0){
n=n*i;
}
}
}else{
for(i=2;i<=nume;i++){
if(nume%i==0&&deno%i==0){
n=n*i;
}
}
}
num=nume/n;den=deno/n;
cout<<"經過方式1化簡後爲:"<<endl;
cout<<num<<"/"<<den<<endl;
}
void CFraction::amplify(int n) //放大n倍,如2/3放大5倍爲10/3
{
int num;
num=nume*n;
cout<<"該數放大n倍後爲:"<<endl;
cout<<num<<"/"<<deno<<endl;
}
void CFraction::simplify1()
{
int n=0,num;
simplify();
cout<<"經過方式2化簡後爲:"<<endl;
if(nume>deno){
n=nume/deno;
num=nume%deno;
cout<<n<<"("<<num<<"/"<<deno<<")"<<endl;
}else{
cout<<num<<"/"<<deno<<endl;
}
}
void CFraction::output(int style) //輸出:以8/6爲例,style爲0時,原樣輸出8/6;
{
switch(style)
{
case(0):
cout<<"化簡後爲:"<<endl;
cout<<nume<<"/"<<deno<<endl;break;
case(1): //style爲1時,輸出化簡後形式4/3;
simplify();break;
case(2): //style爲2時,輸出1(1/3)形式,表示一又三分之一;
simplify1();break;
case(3):
cout<<"經過方式3化簡後爲:"<<endl;//style爲3時,用小數形式輸出,如1.3333;
cout<<nume/double(deno)<<endl;break;
default:
cout<<"化簡後:"<<endl; //不給出參數和非1、2,認爲是方式0
cout<<nume<<"/"<<deno<<endl;break; //輸出:以8/6爲例,style爲0時,原樣輸出8/6;
}
}
int main()
{
CFraction num1;//構造函數,初始化用
num1.output(0); //輸出:以8/6爲例,style爲0時,原樣輸出8/6;
CFraction num2;
num2.set(5,3); //置值,改變值時用
num2.amplify(4); //放大n倍,如2/3放大5倍爲10/3
num2.output(1); //輸出:以8/6爲例,style爲0時,原樣輸出8/6;
num2.output(2);
num2.output(3);
num2.output(4);
CFraction num3;
num3.input(); //按照"nu/de"的格式,如"5/2"的形式輸入
num3.output(3);
num3.amplify(2); //放大n倍,如2/3放大5倍爲10/3
num3.output(2); //化簡輸出1(1/3)形式,表示一又三分之一;
return 0;
}
運行結果:
(貼圖)
心得體會: