« Programmation C++/Les classes » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 398 :
class Fraction
{
friend ostream & operator<<(ostream & out, const Fraction &f);
friend istream & operator>>(istream &in, Fraction &f);
public:
Fraction();
Fraction(int i);
Fraction(int num, int den);
Fraction operator+(const Fraction & f) const;
Fraction operator-(const Fraction & f) const;
Fraction operator*(const Fraction & f) const;
Fraction operator/(const Fraction & f) const;
private:
int num,den;
static int pgcd(int x, int y);
void normalise();
};
Ligne 435 :
Fraction::Fraction(int num, int den) : num(num), den(den)
{
normalise();
}
ostream & operator<<(ostream &out, const Fraction &f)
{
if (f.den != 1)
out << f.num << "/" << f.den;
else
out << f.num;
return out;
Ligne 450 :
istream & operator>>(istream &in, Fraction &f)
{
string s;
bool ok = true;
do
{
cout << "Tapez le numerateur : "; getline(in, s);
istringstream is1(s);
ok = (is1 >> f.num) && is1.eof();
} while(!ok);
do
{
cout << "Tapez le denominateur : "; getline(in, s);
istringstream is2(s);
ok = (is2 >> f.den) && is2.eof();
} while(!ok);
f.normalise();
return in;
}
int Fraction::pgcd(int x, int y)
{
int r;
if (x <= 0 || y <= 0)
r = -1;
else
while(x != 0 && y != 0 && x != y)▼
{
else▼
else
}
▲ r = y;
▲ else
▲ r = x;
}
void Fraction::normalise()
{
int s, n, d, p;
if (den < 0)
{
s = -1;
d = -den;
}
else
{
s = 1;
d = den;
}
if(num < 0)
{
s = -s;
n = -num;
}
else
n = num;
if(n != 0)
{
if(d != 0)
p = pgcd(n, d);
n = n/p;
d = d/p;
}
}
else▼
{
▲ d = d/p;
▲ num = n*s;
▲ den = d;
}
▲ }
▲ else
▲ num = 0;
▲ den = 1;
}
Fraction Fraction::operator+(const Fraction & f) const
{
Fraction r;
r.num = f.den*num + den*f.num;
r.den = f.den*den;
r.normalise();
return r;
}
Fraction Fraction::operator-(const Fraction & f) const
{
Fraction r;
r.num = f.den*num - den*f.num;
r.den = f.den*den;
r.normalise();
return r;
}
Fraction Fraction::operator*(const Fraction & f) const
{
Fraction r;
r.num = f.num*num;
r.den = f.den*den;
r.normalise();
return r;
}
Fraction Fraction::operator/(const Fraction & f) const
{
Fraction r;
r.num = f.den*num;
r.den = f.num*den;
r.normalise();
return r;
}
</source>
Ligne 582 :
int main()
{
Fraction f1, f2, f3, f4, E;
cout << "SAISIE de f1 " << endl; cin >> f1;
cout << "SAISIE de f2 " << endl; cin >> f2;
f3 = Fraction(3, 4);
f4 = Fraction(5, 8);
E = (f1 + f3 - f2) / (f1*f2 - f4) + 4;
cout << "E = " << E << endl;
return 0;
}
</source>
|