Solution de l’exercice 7.2

On obtient 8/16 et ajoutant 1/4 à lui-même, contre 2/4 en multipliant par 2. Dans les deux cas, le résultat est égal à 1/2, mais cela peut poser des problèmes par la suite, car les nombres ont des numérateurs et dénominateurs qui augmentent très vite.

Pour régler le problème, il faut simplifier les fractions. Il faut pour cela écrire une fonction calculant le PGCD (Plus Grand Commun Diviseur) de deux nombres, en utilisant l’algorithme d’Euclide. Voici une solution :

int pgcd(int a, int b){     if ( (a == 0) || (b == 0) ) return a+b;     int c;     do {         c = a%b;         a = b; b = c;     } while (c);     return a;}class fraction {     int num; int den;     fraction& reduire()         {   int d = pgcd(num, den);             num /= d; den/= d;             return *this; }     public :     // ....     }

Il suffit alors d’appeler la fonction membre privée reduire à la fin de chaque opération pour simplifier les fractions. Noter que lorsque l’un des arguments de la fonction pgcd est nul, la fonction renvoie l’autre, de telle sorte que la fraction sera réduite en 0/1 (soit 0) ou 1/0 (infini, qui est en fait une valeur erronée).


Retour au texte.