« 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)
{
ifwhile (x != 0 && y >!= 0 && x != y)
y = y % x;{
r = if (y > x;)
r y = y % x;
else
while(x != 0 && y != 0x &&= x !=% y);
} }
 
denif (x == d;0)
d r = d/py;
else
xr = x % y;
}
 
if(xreturn == 0)r;
r = y;
else
r = x;
}
 
return r;
}
 
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)
num = n*s;{
p = pgcd(n, d);
n = n/p;
d = d/p;
num = 0n*s;
den = 1d;
}
}
else
{
p = pgcd(n,num = d)0;
n den = n/p1;
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>