polynome_degre2.py

Created by cent20

Created on September 08, 2019

8.52 KB

Version optimisée mais pas minifiée


Une des fonctions de ce script est trop lourde >4ko pour le firmware stock de la numworks
La version polynome_degre2_light.py est plus efficace
Marche avec le .bin de Lionel Debroux https://tiplanet.org/forum/download/file.php?id=4627


# computing. ready august 2019
# https://nsi.xyz/
# https://workshop.numworks.com/python/cent20/polynome_degre2
# Auteurs : Arthur Jacquin, Kevin Fedyna, Vincent Robert.

from math import sqrt

a, b, c = 0, 0, 0


def def_calc_trinome():
    global a, b, c, d, e, nb, x, y, x1, x2
    while a == 0:
        a = optimiser(float(input('a = ')))
    b = optimiser(float(input('b = ')))
    c = optimiser(float(input('c = ')))
    d = optimiser(float(b**2 - 4 * a * c))
    e = optimiser(float(a * (-b / (2 * a))**2 + b * (-b / (2 * a)) + c))
    if d == 0:
        nb = 1
    else:
        nb = 2
    x = optimiser((-b) / (2 * a))
    y = optimiser((sqrt(abs(d))) / (2 * a))
    x1 = optimiser(min(x + y, x - y))
    x2 = optimiser(max(x - y, x + y))


def aff_entete():
    optimiser(9, br=1)
    print("Polynome (equation) de degre 2")
    if a == 0:
        print("P(x)=ax^2+bx+c (=0)")
    else:
        print("P(x)={}{}{} (=0)".format(
                optimiser(a, ap="x^2", r=4),
                optimiser(b, p=1, ap="x", r=4, naf=1), optimiser(c, p=1, r=4, naf=1)))
        print("")


def aff_menu():
    print("1. Changer les valeurs a,b,c")

    if d < 0:
        s = "< 0"
    elif d > 0:
        s = "> 0"
    elif d == 0:
        s = ""
    print("2. Discriminant = {} {} ".format(d, s))
    if d < 0:
        print("3. Racines complexes conjuguees : 2 ")
        print("   z1= {} + {} i".format(x, y))
        print("   z2= {} - {} i".format(x, y))
    elif d > 0:
        print("3. Racines reelles distinctes : 2 ")
        print("   x1= {}".format(x1))
        print("   x2= {}".format(x2))
    elif d == 0:
        print("3. Racine reelle double : 1 ")
        print("   x1=x2= {}".format(x))
    if d < 0:
        if a < 0:
            print("4. Signe : -", end=" ")
        else:
            print("4. Signe : +", end=" ")
    elif d == 0:
        if a < 0:
            print("4. Signe : -0-", end=" ")
        else:
            print("4. Signe : +0+", end=" ")
    else:
        if a < 0:
            print("4. Signe : -+-", end=" ")
        else:
            print("4. Signe : +-+", end=" ")
    if a < 0:
        print(", extremum : M")
    else:
        print(", extremum : m")
    if d < 0:
        print("5. Factorisation dans les complexes")
    elif d >= 0:
        print("5. Factorisation dans les reels")
    print("6. Quitter")


def exec_menu(i):
    global a, b, c, d, x, y
    aff_entete()
    if i == 1:
        a, b, c = 0, 0, 0
        def_calc_trinome()
    elif i == 2:
        # Arthur
        print("2. Calcul du discriminant :")
        print("")
        print("d = b^2 + 4*a*c")
        print("  = {}^2 + 4*{}*{}".format(optimiser(b,par=1),optimiser(a,par=1),optimiser(c,par=1)))
        if b == 0 and c != 0:
            print(optimiser(4*a*c,av="  = "))
        else:
            print("  = {}{}".format(optimiser(b**2),optimiser(4*a*c,p=1,naf=1)))
            if c != 0:
                print(optimiser(d,av="  = "))
        print("")
        print(optimiser(d,av="d = "), end=" ")
        if d == 0:
            print("")
        elif d < 0:
            print("< 0")
        elif d > 0:
            print("> 0")
        if b != 0 and c != 0:
            print("")
    elif i == 3:
        # Arthur
        print("3. Calcul des racines :")
        print("")
        if d < 0:
            print("d < 0 donc il existe")
            print("2 racines complexes conjugees")
            print("telles que :")
            print("")
            print("z1 = -b/2a + %(|d|)/2a i")
            print("z2 = -b/2a - %(|d|)/2a i")
        elif d == 0:
            print("d = 0 donc il existe")
            print("1 racine reelle double")
            print("telle que :")
            print("")
            print("x1 = x2 = -b/2a")
            print("")
        elif d > 0:
            print("d > 0 donc il existe")
            print("2 racines reelles distinctes")
            print("telles que :")
            print("")
            if a > 0:
                print("x1 = (-b-%(d))/(2a)")
                print("x2 = (-b+%(d))/(2a)")
            else:
                print("x1 = (-b+%(d))/(2a)")
                print("x2 = (-b-%(d))/(2a)")
        input()
        aff_entete()
        print("3. Calcul des racines :")
        print("")
        if d < 0:
            print("z1 = -b/2a + %(|d|)/2a i")
            print("   = (-{0})/(2*{1}) + %(|{2}|)/(2*{1}) i".format(optimiser(b,par=1,r=4),optimiser(a,par=1,r=4),optimiser(d,r=4)))
            print("   = {} + {} i".format(x,optimiser(y,par=1)))
            print("z2 = -b/2a - %(|d|)/2a i")
            print("   = (-{0})/(2*{1}) - %(|{2}|)/(2*{1}) i".format(optimiser(b,par=1,r=4),optimiser(a,par=1,r=4),optimiser(d,r=4)))
            print("   = {} - {} i".format(x,optimiser(y,par=1)))
        elif d == 0:
            print("x1 = x2 = -b/2a")
            print("   = (-{})/(2*{})".format(optimiser(b,par=1,r=5),optimiser(a,par=1,r=5)))
            print(optimiser(x,av="   = "))
            for i in range(3): print("")
        elif d > 0:
            if a > 0:
                print("x1 = (-b-%(d))/(2a)")
                print("   = (-{}-%({}))/(2*{})".format(optimiser(b,par=1,r=4),optimiser(d,r=4),optimiser(a,par=1,r=4)))
                print(optimiser(x-abs(y),av="   = "))
                print("x2 = (-b+%(d))/(2a)")
                print("   = (-{}+%({}))/(2*{})".format(optimiser(b,par=1,r=4),optimiser(d,r=4),optimiser(a,par=1,r=4)))
                print(optimiser(x+abs(y),av="   = "))
            else:
                print("x1 = (-b+%(d))/(2a)")
                print("   = (-{}+%({}))/(2*{})".format(optimiser(b,par=1,r=4),optimiser(d,r=4),optimiser(a,par=1,r=4)))
                print(optimiser(x+abs(y),av="   = "))
                print("x2 = (-b-%(d))/(2a)")
                print("   = (-{}-%({}))/(2*{})".format(optimiser(b,par=1,r=4),optimiser(d,r=4),optimiser(a,par=1,r=4)))
                print(optimiser(x-abs(y),av="   = "))
    elif i == 4:
        # Vincent
        print("-----------------------------")
        if d <= 0:
            print("  x |        -b/(2a)        |")
            print("-----------------------------")
            if a > 0:
                print("P(x)|     +     m     +     |")
            else:
                print("P(x)|     -     M     -     |")
        else:
            print("  x |    x1  -b/(2a)  x2    |")
            print("-----------------------------")
            if a > 0:
                print("P(x)|  +  0  -  m  -  0  +  |")
            else:
                print("P(x)|  -  0  +  M  +  0  -  |")
        print("-----------------------------")
        print("Extremum : ")
        print("   (", optimiser(-b / (2 * a), r=4), ";", optimiser(e, r=4), ")")
        print("")
        print("")
    elif i == 5:
        # Kevin
        if d == 0:
            print("P(x) = a(x-(-b/2a))^2")
            if x1 != 0:
                print(optimiser(-x1, "P(x) = {}(x".format(a), ")^2", p=1))
            else:
                print("P(x) = {}x^2".format(a))
        elif d > 0:
            print("P(x) = a(x-x1)(x-x2)")
            print(optimiser(-x2,optimiser(-x1,"P(x) = {}(x".format(a),")(x",p=1,naf=2,r=4),")",p=1,naf=2,r=4))
        else:
            print("P(z) = a(z-z1)(z-z2)\nAvec:")
            print(optimiser(-x,"(z-z1) = (z",optimiser(y,ap="i",r=4,naf=1)+")",r=4,naf=2))
            print(optimiser(-x,"(z-z2) = (z",optimiser(-y,ap="i",r=4,naf=1)+")",r=4,naf=2))
    elif i == 6:
        pass
    if i != 6 and i != 1:
        input()


def optimiser(v, av="", ap="", p=0, r=8, naf=0, br=0, par=0):
    # valeur, str avant, str apres, afficher signe, arrondi,
    # ne pas afficher un 0 (1, 2 et 3: resultats differents), sauter v ligne
    # parentheses autour de v
    if br != 0:
        for i in range(v):
            print("")
    elif br == 0:
        if v == 0 and naf == 1:
            return ""
        if v == 0 and naf == 2:
            return str(av) + str(ap)
        if v == 0 and naf == 3:
            return str(av)
        if v == int(v):
            v = int(v)
        else:
            v = round(v, r)
        if av == "" and ap == "" and p == 0 and par == 0:
            return v
        if p == 1 and v > 0:
            v = "+" + str(v)
        if par == 1 and v < 0:
            v = "({})".format(v)
    return str(av) + str(v) + str(ap)


def menu(warning=""):
    aff_entete()
    aff_menu()
    if warning != "":
        print(warning)
    choix = 0
    while choix == 0:
        try:
            choix = int(input())
        except:
            choix = 0
            menu(">> saisir un entier entre 1 et 6 !")
    exec_menu(choix)
    if choix != 6:
        menu()


optimiser(9, br=1)
exec_menu(1)
menu()

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.