//  Objectif : Définir un type Fraction sous la forme d'une classe C++
//  Cette fractionest limitée à :
//	- un numérateur et un dénominateur déclarés privés (principe de
//	  protection en écriture des attributs)
//	- la fraction est normalisée :
//	    . pgcd(numérateur, dénominateur) == 1
//	    . La fraction nulle est représentée par le couple (0, 1)
//	    . Le dénominateur est toujours strictement positif
//	- une fonction afficher
//	- une fonction set
//	- les accesseurs numerateur() et denominateur().  Les attributs ont été
//	  renomés _numerateur et _denominateur.
//	- les modifieurs set_numerateur et set_denominateur n'ont pas été
//	  définis (la fonction set nous suffit).

#ifndef	FRACTION__H
#define	FRACTION__H

class Fraction {
public:	
    int numerateur() const;	// le numérateur
    int denominateur() const;	// le dénominateur

    void afficher() const;
	// Afficher la fraction.

    void set(int num, int den = 1);
	// Changer une fraction en précisant son nouveau numérateur et son
	// nouveau dénominateur.
	//
	// @requires den != 0;	// dénominateur non nul

    void opposer();
	// Changer le signe de la fraction.

    Fraction opposee();
	// La fraction opposée.

private:
    int _numerateur;
    int _denominateur;

    void normaliser();
	// Normaliser la fraction.
	// Remarque : Cette fonction est déclarée privée car l'utilisateur d'une
	// fraction n'a jamais besoin de l'appliquer explicitement sur une
	// fraction.  Toutes les fractions qu'il manipule sont déjà normalisées.

};

#endif
