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.hppqui contiendra la définition de la structure et les prototypes des méthodes. La structure devra s'appelerFractionet contenir deux entiers positifs nommésnumeratoretdenominatorde typeunsigned intavec comme valeur par défaut0/1. La structure devra contenir une méthodedisplayet 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.cppqui 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.hppqui 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.cppet 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 de22par8)6est différent de0donc on continue8 % 6 = 2(reste de la division de8par6)2est différent de0donc on continue6 % 2 = 0(reste de la division de6par2)0est égal à0donc on s'arrête et le plus grand diviseur commun est2.
-
Modifier vos fonctions
add,sub,muletdivpour simplifier le résultat avant de le retourner. -
Créer un fichier
main.cppqui contiendra le programme principal. Ce programme devra :- Créer deux fractions
f1etf2avec 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 🛠.