Please i need a help in my project . i hope that you help me to have the correct code.
Nombres rationnels
Sur le modèle des nombres complexes, on se propose de réaliser une classe qui représente les nombres rationnels. Notre point de départ est :
class Rationnel { int p; // numérateur int q; // dénominateur }
Testez votre code pour chaque question et assurez-vous que tout fonctionne correctement avant de passer à la question suivante !
Question 1. Commencez par implanter une fonction pgcd()
(hors classe) qui calcule le plus grand diviseur commun de deux nombres entiers. Utilisez l’algorithme d’Euclide. Nous allons utiliser cette fonction pour garder nos nombres rationnels en forme irréductible (le numérateur et le dénominateur n’ont pas de diviseur commun).
Ajoutez à votre classe le constructeur suivant :
// Crée un nombre rationnel à partir d’un numérateur et un dénominateur donnés en argument Rationnel(int p, int q) { // on s’assure que le dénominateur n’est pas nul assert q != 0 : “le dénominateur ne peut pas être nul”; // on s’assure que le nombre est stocké sous forme de fraction irréductible // par exemple 42/54 → 7/9 int d = pgcd(p, q); this.p = p / d; this.q = q / d; // pour avoir une représentation unique, on s’assure que le dénominateur est positif // par exemple 3/-5 → -3/5 et -2/-3 → 2/3 if (this.q < 0) { this.p = -this.p; this.q = -this.q; } }
Vous remarquerez l’utilisation de l’instruction assert
. Si l’expression booléenne (dans ce cas q != 0
) s’évalue à false
, le programme s’arrête avec un message d’erreur :
AssertionError: le dénominateur ne peut pas être nul
Testez avec :
void setup() { Rationnel r = new Rationnel(42, 0); }
Les deux points et la chaîne de caractères après sont facultatifs. Vous pouvez utiliser l’instruction assert
pour tester vos méthodes. Voici quelques exemples de tests pour notre constructeur :
void setup() { Rationnel r1 = new Rationnel(2, 4); assert r1.p == 1 && r1.q == 2; Rationnel r2 = new Rationnel(42, -54); assert r2.p == -7 : "Le numérateur doit être -7 et pas " + r2.p; assert r2.q == 9 : "Le dénominateur doit être 9 et pas " + r2.q; }
Question 2. Ajoutez quelques autres constructeurs à votre classe :
- Un constructeur qui crée un nombre rationnel égal à un nombre entier donné en argument.
- Un constructeur sans argument (constructeur par défaut) qui crée le nombre rationnel zéro (0/1).
- Un constructeur qui crée un nombre rationnel qui est égal à un autre nombre rationnel donné en argument (constructeur par recopie).
Question 3. Ajoutez à votre classe une méthode toString()
qui renvoie une représentation sous forme "p/q"
. Pensez aux cas particuliers, par exemple "3"
et pas "3/1"
.
Question 4. Écrivez des accesseurs num()
et den()
qui renvoient le numérateur et le dénominateur d’un nombre rationnel.
Question 5. Écrivez un autre accesseur val()
qui renvoie la valeur réelle d’un nombre rationnel. Par exemple, la valeur réelle de 1/4
est 0.25
.
Question 6. Écrivez une méthode egal()
qui vérifie si deux nombres rationnels sont égaux. Notre constructeur a pris soin de représenter chaque nombre rationnel de façon unique, il suffit donc de vérifier si les deux numérateurs sont égaux et les deux dénominateurs sont égaux. Écrivez une autre méthode egal()
qui vérifie si un nombre rationnel est égal à un nombre entier.
Question 7. Faites des méthodes inf()
et sup()
qui vérifient si un nombre rationnel est inférieur/supérieur à un autre nombre rationnel ou à un nombre entier.
Question 8. Écrivez une méthode plus()
qui calcule la somme de deux nombres rationnels. Cette méthode doit créer un nouvel objet qui est la somme de l’objet qui l’appelle (argument implicite) et l’objet passé en argument (argument explicite). Inspirez-vous de la méthode plus()
de la classe Complexe
. Écrivez une autre méthode plus()
qui calcule la somme d’un nombre rationnel et un nombre entier.
Question 9. Ajoutez des méthodes moins()
, mult()
et div()
qui implantent soustraction, multiplication et division (par nombre rationnel et par nombre entier).
Question 10. Comme application de votre classe, approximez π en utilisant la formule de Leibniz :
π = 4 - 4/3 + 4/5 - 4/7 + 4/9 - …
Utilisez les quelques premiers termes et affichez l’approximation sous forme d’un nombre rationnel et d’un nombre réel. Voici les quelques premières approximations :
4 = 4 = 4.0
4 - 4/3 = 8/3 = 2.6666667
4 - 4/3 + 4/5 = 52/15 = 3.4666667
4 - 4/3 + 4/5 - 4/7 = 304/105 = 2.8952382
4 - 4/3 + 4/5 - 4/7 + 4/9 = 1052/315 = 3.3396826
...