M2103-TP2-Exo-4

Partie d’un exercice donné en test le 01/02/2007

Un nombre rationnel est un nombre réel qui peut être mis sous la forme d’une fraction d’entiers.

Un objet de la classe Rationnel est destiné à manipuler des nombres rationnels.

Téléchargez le fichier
TestRationnel.cpp
.

Créez le projet RationnelV1.

Classe Rationnel

Dans les fichiers Rationnel.h et Rationnel.cpp, écrire la déclaration de la classe Rationnel, de l’espace de noms nsMath, et les définitions de ses fonctions membres.

La classe dont le diagramme de classe est
doit posséder :

  • deux données membres myNum et myDenom représentant le numérateur et le dénominateur de la fraction (entiers signés),

  • deux constructeurs, un par défaut et un par recopie,

  • la fonction membre display(), de profil suivant :

    void display (void) const;
    

    qui, dans le flux standard de sortie, affiche le numérateur et le dénominateur séparés par un ‘/‘ (sans espace), -3/7 par exemple,

  • la fonction membre simplifier(), locale à la classe.

    Les fractions comme -12/5 et 12/-5 par exemple sont mathématiquement équivalentes, mais seule la première est acceptée comme représentation interne,

    Les fractions comme 12/5 et –12/-5 par exemple sont mathématiquement équivalentes, mais seule la première est acceptée comme représentation interne.>

    La représentation interne des rationnels doit être la plus simple possible.

    Pour cela, il est nécessaire de simplifier la fraction en divisant le numérateur et le dénominateur par leur plus grand commun diviseur (PGCD).

    Il faut remarquer que :

    • la fraction 0/b peut être “simplifiée” en 0/1

    • le PGDC de deux nombres entiers peut être calculé par l’algorithme suivant :

      fonction PGCD (N1 : in entier_naturel,
                     N2 : in entier_naturel)
          renvoie entier_naturel
      debut
          declarer a : entier_naturel;
          a <- N1;
          declarer b : entier_naturel;
          b <- N2;
          jusqu_a (a vaut b)
          faire
              si (a < b)
                  b <- b - a;
              sinon
                  a <- a - b;
              fsi
          ffaire
      
          renvoie b;
      fin
      

      Dans l’espace de noms anonyme du fichier Rationnel.cpp, écrire une fonction PGDC(a,b) qui calcule le PGDC de deux entiers positifs.

      La valeur absolue d’un numérique peut être obtenue en utilisant la fonction standard de C++ abs().

  • ce qu’il faut pour rendre la classe Rationnel LessThanComparable et EqualityComparable,

  • les opérateurs +, -, * et /.