"""
""" #! /usr/bin/python3 # -*- coding: utf-8 -*- # lettres accentuées interdites (non ASCII 0-127 : poseront toujours des problèmes) # acceptées dans les commentaires et les chaînes de caractères # intérêt : test if / elif / else doc = """ # but du programme : calculer les racines d'une équation du second degré. # # amélioration possible : # quand P << S² : b=-aS et Delta sont presque égaux, # il faut calculer la plus grande racine x1 (en valeur absolue) # puis en déduire la petite racine par : x1 x2 = c/a """ # pour la fonction sqrt(), il faut le package math from math import sqrt # on peut aussi utiliser "puissance 1/2" : **0.5 # sqrt(a) = a**0.5 = pow(a, 0.5) # racines de : a x^2 + b x + c = 0 def ax2bxc(a, b, c) : print(f"### équation : {a} x^2 + ({b}) x + ({c}) = 0") delta = b*b - 4*a*c racines = None # liste des racines non définie if delta > 0 : # début du cas delta > 0 # On a 2 racines x1 = (-b - sqrt(delta)) / (2*a) x2 = (-b + sqrt(delta)) / (2*a) racines = [ x1, x2 ] elif delta == 0 : # début du cas delta == 0 # On a 1 racine double racines = [ -b/(2*a) ] else : # delta < 0 # début du cas delta < 0 # Il n'y a pas de racine réelle racines = [ ] return racines # début du programme : # 4 cas tests : x^2 - S x + P = 0 avec S=(x1+x2) et P=x1*x2 # (a = 1, b = -5, c = 6) : x1 = 2 et x2 = 3 # (1, -4, 4) : x = 2 # (1, 1, 1) : pas de racine réelle # (1, -100.01, 1) : 2 racines 100 et 0.01 # résultat moins précis que 1.e-15 for (a, b, c) in [ (1, -5, 6), (1, -4, 4), (1, 1, 1), (1, -100.01, 1) ] : racines = ax2bxc(a, b, c) print(" racines :", racines ) # vérification : for xi in racines : # 1e-15 à régler selon la précision désirée if abs(a * xi**2 + b * xi + c) > 1.e-15 : # on n'a jamais exactement 0, mais un petit nombre print("Erreur : xi=", xi, "ne vérifie pas l'équation") print("a xi^2 + b xi + c = ", a * xi**2 + b * xi + c, "!= 0") print() print("# fin") """"""