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
etmyDenom
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
et12/-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 fonctionPGDC(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/
.