rationnel.py

text/x-python rationnel.py — 3.6 KB

Contenu du fichier

''' **********************************************************************
    Fichier rationnel.py

    Classe qui implante le type rationnel

    auteur gabriel girard
    date 2016

    Entree : toutes les fonctions ont un rationnel comme paramètre implicite (self)
********************************************************************** '''
class Rationnel:
    #------------------------------------------------
    # Initialisation du rationne (0/1 par défaut)
    # Entree : (paramètre) numérateur et dénominateur
    #
    def __init__(self, num=0, denom=1):
        self.num = num
        if denom != 0:
            self.denom = denom
        else:
            print("Dénominateur nul")
            self.num = 0
            self.denom = 1
    #------------------------------------------------
    # Prépare le rationnel pour impression
    # Sortie : (retour) rationnel en chaine de car.
    #
    def __str__(self):
        return str(self.num) + "/" + str(self.denom)
    #------------------------------------------------
    # Simplifie un rationnel
    #
    def simplifier(self):
        if self.num == 0: self.denom = 1
        else:
            i = self.num
            if i < 0: i = -i
            j = self.denom
            # recherche du plus grand commun diviseur
            while i != j:
                if i > j: i -= j
                else: j -= i
            self.num = int(self.num / i)
            self.denom = int(self.denom / i)
    #------------------------------------------------
    # Met deux rationnels sur le même dénominateur
    # Entree : (parametre) rationnel
    def m_deno(self, r):
        if self.denom != r.denom:
            self.num *= r.denom
            r.num *= self.denom
            self.denom *= r.denom
            r.denom = self.denom
    #------------------------------------------------
    # Fait la somme de deux rationnels
    # Entree : (parametre) rationnel
    # Sortie : (retour) un rationnel
    def __add__(self, r):
        t = Rationnel()
        t.num = self.num
        t.denom = self.denom
        t.m_deno(r)
        t.num += r.num
        t.simplifier()
        return t
    #------------------------------------------------
    # Multiplie deux rationnels
    # Entree : (parametre) rationnel
    # Sortie (retour) un rationnel
    def __mul__(self, r):
        t = Rationnel()
        t.num = self.num * r.num
        t.denom = self.denom*r.denom
        t.simplifier()
        return t
    #------------------------------------------------
    # Compare deux rationnels
    # Entree : (parametre) rationnel
    # Sortie (retour) True/False selon la comparaison
    def __eq__(self, r):
        t1 = Rationnel()
        t1.num = self.num
        t1.denom = self.denom
        t2 = r
        t1.m_deno(t2)
        return t1.num == t2.num

#
#  Code pour tester le type rationnel
#
def main():
    nb1 = Rationnel(2, 3)
    nb2 = Rationnel(-4, 0)
    nb3 = Rationnel(2, 3)
    a = Rationnel(2, 3)
    b = Rationnel(1, 3)
    c = Rationnel(3, 4)

    print("Le rationnel nb1 vaut: ", str(nb1))
    print("Le rationnel nb2 vaut: ", str(nb2))
    print("Le rationnel nb3 vaut: ", str(nb3))

    nb2 = nb1 * nb3
    print("Le rationnel nb2 vaut: ", str(nb2))

    nb2 = nb1 + b
    print("Le rationnel nb2 vaut: ", str(nb2))

    nb2 = nb1 + c
    print("Le rationnel nb2 vaut: ", str(nb2))

    if a == c:
        print("Les deux rationnels sont égaux")
    else:
        print("Les deux rationnels sont différents")
    if a == nb3:
        print("Les deux rationnels sont égaux")
    else:
        print("Les deux rationnels sont différents")


if __name__ == "__main__":
    main()