Code:
#ifndef fraction_h
#define fraction_h
#include <iostream>
#include <iomanip>
#include <string>
#include "common.h"
#include "readme.h"
using namespace std;
class fraction
{
private:
int ts,ms;
public:
fraction(int t = 0,int m = 1){ts = t; ms = m;};
string ftos(); //fraction to string
void stof(string&); //string to fraction
friend ostream& operator<<(ostream&,fraction&);
friend istream& operator>>(istream&,fraction&);
fraction operator~(); //reduce
fraction operator+(); //standard
fraction operator-(); //negative
fraction operator*(); //reciprocal
fraction operator+(fraction);
fraction operator-(fraction);
fraction operator*(fraction);
fraction operator/(fraction);
friend fraction result(fraction&,fraction&,char);
friend void cal(fraction&,fraction&,fraction&,char);
friend void intro(fraction&,fraction&,fraction&,char);
friend void rutgon(int,int,int,fraction&,int);
friend void cong(fraction&,fraction&);
friend void tru(fraction&,fraction&);
friend void nhan(fraction&,fraction&);
friend void chia(fraction&,fraction&);
};
#endif
file fraction.cpp:
Code:
#include "fraction.h"
string fraction::ftos() //fraction to string
{
string s = itos(ts); ;
if (ms != 1) s += '|' + itos(ms);
return s;
}
void fraction::stof(string& s) //string to fraction
{
if (!isfrac(s))
{
ts = stoi(s);
ms = 1;
}
else
{
int i = 0;
int pos = i; int len = 1;
while ( s[i++] != '|' ) ++len;
string num;
num.assign(s,pos,len); ts = stoi(num);
pos = i; len = 1;
while ( i < s.size() )
{
++len;
++i;
}
num.assign(s,pos,len); ms = stoi(num);
}
*this = +*this;
}
ostream& operator<<(ostream& cout,fraction& x) //xuat phan so
{
cout <<x.ts;
if (x.ms != 1) cout<<'|' <<x.ms;
return cout;
}
istream& operator>>(istream& cin,fraction& x) //nhap phan so
{
string s;
cin >>s;
x.stof(s);
return cin;
}
fraction fraction::operator~() //reduce
{
int tmp = gcd(ts,ms);
ts /= tmp;
ms /= tmp;
return *this;
}
fraction fraction::operator+() //standard
{
if (ms < 0)
{
ts = -ts;
ms = -ms;
}
return *this;
}
fraction fraction::operator-() //negative
{
ts = -ts;
return *this;
}
fraction fraction::operator*() //reciprocal
{
swap(ts,ms);
return *this;
}
fraction fraction::operator+(fraction x)
{
return ~fraction(ts * x.ms + ms * x.ts,ms * x.ms);
}
fraction fraction::operator-(fraction x)
{
x = -x;
return ~(*this + x);
}
fraction fraction::operator*(fraction x)
{
return ~fraction(ts * x.ts,ms * x.ms);
}
fraction fraction::operator/(fraction x)
{
x = +(*x);
return ~(*this * x);
}
fraction result(fraction& a,fraction& b,char ope)
{
switch (ope)
{
case '+': return a+b; break;
case '-': return a-b; break;
case '*': return a*b; break;
case '/': return a/b; break;
default : break;
}
}
void cal(fraction& a,fraction& b,fraction& c,char ope)
{
int m = len(a.ts,a.ms),n = len(b.ts,b.ms),k = len(c.ts,c.ms);
cout <<setw(m) <<a.ts <<" " <<setw(n) <<b.ts <<" "
<<setw(k) <<c.ts <<endl;
for (int i = 0;i < m;++i) cout <<char(196);
cout <<' ' <<ope <<' ';
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < k;++i) cout <<char(196);
cout <<endl;
cout <<setw(m) <<a.ms <<" " <<setw(n) <<b.ms <<" "
<<setw(k) <<c.ms <<"\n\n";
}
void intro(fraction& a,fraction& b,fraction& c,char ope)
{
system("cls");
switch (ope)
{
case '+': phepcong(); break;
case '-': pheptru(); break;
case '*': phepnhan(); break;
case '/': phepchia(); break;
default : break;
}
system("pause");
system("cls");
cal(a,b,c,ope);
}
void rutgon(int T,int M,int r,fraction& c,int k)
{
cout <<endl
<<setw(r) <<T <<" " <<setw(k) <<c.ts <<endl;
for (int i = 0;i < r;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < k;++i) cout <<char(196);
cout <<endl
<<setw(r) <<M <<" " <<setw(k) <<c.ms <<endl;
}
void cong(fraction& a,fraction& b)
{
fraction c = a + b;
intro(a,b,c,'+');
int M = a.ms * b.ms;
cout <<"Cac buoc thuc hien:\n\nM = " <<a.ms <<" * " <<b.ms
<<" = " <<M <<endl;
int i = a.ts*b.ms,j = b.ts*a.ms;
int m = len(a.ts,a.ms),n = len(b.ts,b.ms),k = len(c.ts,c.ms);
int p = len(i,M),q = len(j,M);
cout <<endl
<<setw(m) <<a.ts <<" " <<setw(p) <<i <<" "
<<setw(n) <<b.ts <<" " <<setw(q) <<j <<endl;
for (int i = 0;i < m;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < p;++i) cout <<char(196);
cout <<" ; ";
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < q;++i) cout <<char(196);
cout <<endl
<<setw(m) <<a.ms <<" " <<setw(p) <<M <<" "
<<setw(n) <<b.ms <<" " <<setw(q) <<M <<endl;
int T = i + j,r = len(T,M);
cout <<endl
<<setw(p) <<i <<" " <<setw(q) <<j <<" "
<<setw(r) <<T <<endl;
for (int i = 0;i < p;++i) cout <<char(196);
cout <<" + ";
for (int i = 0;i < q;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < r;++i) cout <<char(196);
cout <<endl
<<setw(p) <<M <<" " <<setw(q) <<M <<" "
<<setw(r) <<M <<endl;
rutgon(T,M,r,c,k);
}
void tru(fraction& a,fraction& b)
{
fraction c = a - b;
intro(a,b,c,'-');
int M = a.ms * b.ms;
cout <<"\nCac buoc thuc hien:\n\nM = " <<a.ms <<" * " <<b.ms
<<" = " <<M <<endl;
int i = a.ts*b.ms,j = b.ts*a.ms;
int m = len(a.ts,a.ms),n = len(b.ts,b.ms),k = len(c.ts,c.ms);
int p = len(i,M),q = len(j,M);
cout <<endl
<<setw(m) <<a.ts <<" " <<setw(p) <<i <<" "
<<setw(n) <<b.ts <<" " <<setw(q) <<j <<endl;
for (int i = 0;i < m;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < p;++i) cout <<char(196);
cout <<" ; ";
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < q;++i) cout <<char(196);
cout <<endl
<<setw(m) <<a.ms <<" " <<setw(p) <<M <<" "
<<setw(n) <<b.ms <<" " <<setw(q) <<M <<endl;
int T = i - j,r = len(T,M);
cout <<endl
<<setw(p) <<i <<" " <<setw(q) <<j <<" "
<<setw(r) <<T <<endl;
for (int i = 0;i < p;++i) cout <<char(196);
cout <<" - ";
for (int i = 0;i < q;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < r;++i) cout <<char(196);
cout <<endl
<<setw(p) <<M <<" " <<setw(q) <<M <<" "
<<setw(r) <<M <<endl;
rutgon(T,M,r,c,k);
}
void nhan(fraction& a,fraction& b)
{
fraction c = a * b;
intro(a,b,c,'*');
int M = a.ms * b.ms;
int m = len(a.ts,a.ms),n = len(b.ts,b.ms),k = len(c.ts,c.ms);
int T = a.ts * b.ts,r = len(T,M);
cout <<"\nCac buoc thuc hien:\n\n"
<<setw(m) <<a.ts <<" " <<setw(n) <<b.ts <<" "
<<setw(r) <<T <<endl;
for (int i = 0;i < m;++i) cout <<char(196);
cout <<" * ";
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < r;++i) cout <<char(196);
cout <<endl
<<setw(m) <<a.ms <<" " <<setw(n) <<b.ms <<" "
<<setw(r) <<M <<endl;
rutgon(T,M,r,c,k);
}
void chia(fraction& a,fraction& b)
{
fraction c = a / b;
intro(a,b,c,'/');
int M = a.ms * b.ts;
int m = len(a.ts,a.ms),n = len(b.ts,b.ms),k = len(c.ts,c.ms);
int T = a.ts * b.ms,r = len(T,M);
cout <<"\nCac buoc thuc hien:\n\n"
<<setw(m) <<a.ts <<" " <<setw(n) <<b.ts <<" "
<<setw(m) <<a.ts <<" " <<setw(n) <<b.ms <<" "
<<setw(r) <<T <<endl;
for (int i = 0;i < m;++i) cout <<char(196);
cout <<" / ";
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < m;++i) cout <<char(196);
cout <<" * ";
for (int i = 0;i < n;++i) cout <<char(196);
cout <<" = ";
for (int i = 0;i < r;++i) cout <<char(196);
cout <<endl
<<setw(m) <<a.ms <<" " <<setw(n) <<b.ms <<" "
<<setw(m) <<a.ms <<" " <<setw(n) <<b.ts <<" "
<<setw(r) <<M <<endl;
rutgon(T,M,r,c,k);
}
Khi nhúng vào 1 project thì chỉ được nhúng file .cpp, ko nhúng .h