S1 - Exercice - Structure Fraction
Le but de cet exercice est de créer une structure permettant de représenter une fraction. Cette structure devra contenir deux entiers positifs, un pour le numérateur et un pour le dénominateur.
On va utiliser un fichier d'en-tête pour définir la structure et les fonctions qui vont permettre de manipuler les fractions.
-
Créer un fichier
fraction.hpp
qui contiendra la définition de la structure et les prototypes des méthodes. La structure devra s'appelerFraction
et contenir deux entiers positifs nommésnumerator
etdenominator
de typeunsigned int
avec comme valeur par défaut0/1
. La structure devra contenir une méthodedisplay
et qui permet d'afficher (std::cout
) la fraction sous la formenumerator/denominator
.Vous devrez également définir les prototypes des fonctions suivantes :
add
: prend deux fractions en paramètre et retourne la somme des deux fractions.sub
: prend deux fractions en paramètre et retourne la différence des deux fractions.mul
: prend deux fractions en paramètre et retourne le produit des deux fractions.div
: prend deux fractions en paramètre et retourne le quotient des deux fractions.
Pour simplifier on va considérer que les fractions sont toujours positives et on ne va pas gérer le cas ou le résultat d'une opération est négatif ou le problème de division par zéro. Vous êtes toute fois libre de gérer ces cas si vous le souhaitez (et donc changer le type des attributs de la structure et utiliser des entiers signés).
Petit rappel sur la définition des prototypes de méthodes pour les structures ici.
-
Créer un fichier
fraction.cpp
qui contiendra les définitions des méthodes et fonctions. -
Implémenter les fonctions dans le fichier
fraction.cpp
.
Les fonctions add
, sub
, mul
et div
ne doivent pas modifier les fractions passées en paramètre mais bien retourner une nouvelle fraction qui est le résultat de l'opération.
-
Créer un fichier
utils.hpp
qui contiendra les fonctions suivantes :gcd
: prend deux entiers positifs en paramètre et retourne le plus grand diviseur commun.simplify
: prend une fraction en paramètre et retourne la fraction simplifiée.
-
Créer un fichier
utils.cpp
et implémenter les fonctions.
Pour simplifier une fraction, il faut diviser le numérateur et le dénominateur par le plus grand diviseur commun.
On va donc utiliser la fonction gcd
pour calculer le plus grand diviseur commun et ensuite diviser le numérateur et le dénominateur par ce nombre.
la fraction 4/6
devient 2/3
car gcd(4, 6) = 2
et 4/2 = 2
et 6/2 = 3
.
Il faut importer le fichier fraction.hpp
dans le fichier utils.hpp
pour pouvoir utiliser la structure Fraction
dans la fonction simplify
.
Pour trouver le plus grand diviseur commun, on peut utiliser l'algorithme d'Euclide qui consiste à diviser le plus grand nombre par le plus petit et à répéter l'opération avec le reste de la division jusqu'à obtenir un reste nul. Dans ce cas, le plus petit nombre non nul est le plus grand diviseur commun.
exemple avec 22
et 8
:
22 % 8 = 6
(reste de la division de22
par8
)6
est différent de0
donc on continue8 % 6 = 2
(reste de la division de8
par6
)2
est différent de0
donc on continue6 % 2 = 0
(reste de la division de6
par2
)0
est égal à0
donc on s'arrête et le plus grand diviseur commun est2
.
-
Modifier vos fonctions
add
,sub
,mul
etdiv
pour simplifier le résultat avant de le retourner. -
Créer un fichier
main.cpp
qui contiendra le programme principal. Ce programme devra :- Créer deux fractions
f1
etf2
avec les valeurs de votre choix. (idéalement avec des valeurs aléatoires ou saisies par l'utilisateur) - Afficher les deux fractions.
- Afficher la somme des deux fractions.
- Afficher la différence des deux fractions.
- Afficher le produit des deux fractions.
- Afficher le quotient des deux fractions.
- Créer deux fractions
Vous découvrirez au second semestre comment améliorer ce programme en utilisant la surcharge d'opérateurs 🛠.