def exo_racines_degre2(parametre):
    '''exercice recherche de racines second degré'''

    question = ""
    exo=[]
    cor=[]
    #intervalle pour les racines entières ou fractionnaire
    rac_min=-10
    rac_max=10
    #denominateur maximmum pour les racines fractionnaires
    denom_max=denom1=12
    #Valeurs absolues maximales des coefficients d'un polynôme quelconque
    abs_a=1
    abs_b=10
    abs_c=10
    #X est le polynome P=x pour faciliter la construction des polynômes,
    inconnues=['x','y','z','t']
    nom_poly=['P','Q','R','S']

    exo.append(u"Résoudre les équations suivantes :")
    cor.append(u"Résoudre les équations suivantes :")
    exo.append("\\begin{enumerate}")
    cor.append("\\begin{enumerate}")


    #Racines entières
    nomP='P'
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    P=poly_racines_entieres(rac_min,rac_max,X)

    exo.append("\\item $%s=0$\\par"%(P(var)))
    cor.append("\\item $%s=0$\\par"%(P(var)))
    cor=redaction_racines(P,nomP,var,cor)

    #Racines fractionnaires
    nomP='P'
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    P=poly_racines_fractionnaires(rac_min,rac_max,denom_max,X)

    exo.append("\\item $%s=0$\\par"%(P(var)))
    cor.append("\\item $%s=0$\\par"%(P(var)))
    cor=redaction_racines(P,nomP,var,cor)

    #Racines quelconques
    nomP='P'
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    P=poly_racines_quelconques(abs_a,abs_b,abs_c,X)

    exo.append("\\item $%s=0$\\par"%(P(var)))
    cor.append("\\item $%s=0$\\par"%(P(var)))
    redaction_racines(P,nomP,var,cor)

    exo.append("\\end{enumerate}")
    cor.append("\\end{enumerate}")
    return exo,cor,question
def exo_tableau_de_signe(parametre):
    #intervalle pour les racines entières ou fractionnaire
    rac_min=-10
    rac_max=10
    #denominateur maximmum pour les racines fractionnaires
    denom_max=denom1=12
    #Valeurs absolues maximales des coefficients d'un polynôme quelconque
    abs_a=1
    abs_b=10
    abs_c=10
    #X est le polynome P=x pour faciliter la construction des polynômes, TODO : changer  l'inconnue
    inconnues=['x','y','z','t']
    nom_poly=['P','Q','R','S']
    borneinf=-5#float("-inf")
    bornesup=5#float("inf")
    var="x"
    X=Polynome({1:1},var=var)
    Poly=[poly_racines_entieres(rac_min,rac_max,X),
          poly_racines_fractionnaires(rac_min,rac_max,denom1,X),
          poly_racines_quelconques(abs_a,abs_b,abs_c,X)]
    intervalles=[[0,5],[-5,5],[float("-inf"),float("inf")]]
    
    question = ""
    exo=["\\begin{enumerate}"]
    cor=["\\begin{enumerate}"]
    nomP="P"
    for i in range(len(Poly)):
        P=Poly[i]
        borneinf,bornesup=intervalles[i]
        if borneinf==float("-inf") and bornesup==float("inf"):
            TeXintervalle="\\mathbb R"
        else:
            if borneinf!=float("-inf"):
                TeXintervalle="["
            else:
                TeXintervalle="]"
            TeXintervalle+="%s~;~%s"%(TeX(borneinf),TeX(bornesup))
            if bornesup==float("inf"):
                TeXintervalle+="["
            else:
                TeXintervalle+="]"
        exo.append(u"\\item Étudier le signe du polynôme $%s=%s$ sur $I=%s$." % (nomP,P,TeXintervalle))
        cor.append(u"\\item Étudier le signe du polynôme $%s=%s$ sur $I=%s$.\\par" % (nomP,P,TeXintervalle))

        delta,simplrac,racines,str_racines,factorisation=factorisation_degre2(P,factorisation=False)
        redaction_racines(P,nomP,var,cor)
        tableau_de_signe(P,nomP,delta,racines,cor,borneinf,bornesup,detail=False)
    exo.append("\\end{enumerate}")
    cor.append("\\end{enumerate}")
    return exo,cor,question
def exo_factorisation_degre2(parametre):
    '''exercice recherche de racines second degré'''

    question = ""
    exo=[]
    cor=[]
    #intervalle pour les racines entières ou fractionnaire
    rac_min=-10
    rac_max=10

    #X est le polynome P(x)=x pour faciliter la construction des polynômes,
    inconnues=['x','y','z','t']
    nom_poly=['P','Q','R','S']

    exo.append(u"Factoriser les polynômes suivants :")
    #cor=[]u"Factoriser les polynômes suivants :"]
    exo.append("\\begin{enumerate}")
    cor.append("\\begin{enumerate}")

####identites remarquables

    nomP=nom_poly[randrange(4)]
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    P,sgns=poly_id_remarquables(rac_min,rac_max,X)#sgns=-2,0 ou 2
    exo.append(u"\\item Factoriser  $%s(%s)=%s$ à l'aide d'une identité remarquable."% (nomP,var,P(var)))
    cor.append("\\item Factoriser $%s(%s)=%s$"% (nomP,var,P(var)))

    factorisation,racines=factorise_identites_remarquables(P,sgns,var,racines=True)

    factorise="$$%s"% P
    for i in range(len(factorisation)):
        factorise+="="+factorisation[i]
    cor.append(factorise+"$$")

####Racines entières
    nomP=nom_poly[randrange(4)]
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    P=poly_racines_entieres(rac_min,rac_max,X)

    exo.append("\\item $%s(%s)=%s$"%(nomP,var,P(var)))
    cor.append("\\item Factoriser $%s(%s)=%s$\\par"%(nomP,var,P(var)))
    exo,cor=redaction_factorisation(P,nomP,exo,cor)

####Racines fractionnaires
    nomP=nom_poly[randrange(4)]
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    #denominateur maximmum pour les racines fractionnaires
    denom_max=12
    P=poly_racines_fractionnaires(rac_min,rac_max,denom_max,X)

    exo.append("\\item $%s(%s)=%s$"%(nomP,var,P(var)))
    cor.append("\\item Factoriser $%s(%s)=%s$\\par"%(nomP,var,P(var)))
    exo,cor=redaction_factorisation(P,nomP,exo,cor)


####Racines quelconques
    nomP=nom_poly[randrange(4)]
    var=inconnues[randrange(4)]
    X=Polynome({1:1},var)
    #Valeurs absolues maximales des coefficients d'un polynôme quelconque
    abs_a=1
    abs_b=10
    abs_c=10
    P=poly_racines_quelconques(abs_a,abs_b,abs_c,X)

    exo.append("\\item $%s(%s)=%s$"%(nomP,var,P(var)))
    cor.append("\\item Factoriser $%s(%s)=%s$\\par"%(nomP,var,P(var)))
    exo,cor=redaction_factorisation(P,nomP,exo,cor)

    exo.append("\\end{enumerate}")
    cor.append("\\end{enumerate}")
    return exo,cor,question
def quest_variation_degre3(borneinf=float("-inf"),bornesup=float("+inf")):
    '''Question qui propose l'étude du sens de variation d'un polynôme de degré 3'''
    Intervalle=[borneinf,bornesup]
    if borneinf==float("-inf") and bornesup==float("+inf"):
        TeX_intervalle="\\mathbb R"
    else:
        TeX_intervalle="\\left[%s~;~%s\\right]"%(TeX(borneinf),TeX(bornesup))
    #intervalle pour les racines entières ou fractionnaire
    a=3*randint(1,3)
    rac_min=-9
    rac_max=9
    #denominateur maximmum pour les racines fractionnaires
    denom_max=denom1=12
    #Valeurs absolues maximales des coefficients d'un polynôme quelconque
    abs_a=6
    abs_b=10
    abs_c=10
    #X est le polynome P=x pour faciliter la construction des polynômes,
    inconnues=['x','y','z','t']
    nom_poly=['P','Q','R','S']
    var="x"
    X=Polynome({1:1},var=var)
    nomP=["f","g","h","k","p","q"][randrange(6)]
    Pprime=poly_racines_entieres(rac_min,rac_max,X,a1=a)
    P=Pprime.primitive()+randint(-abs_c,abs_c)
    P=P.simplifie()
    exo=[u"\\item Étudier le sens de variations de $%s$ définie par $%s(x)=%s$ sur $%s$." % (nomP,nomP,P(var),TeX_intervalle)]
    cor=[u"\\item Étudier le sens de variations de $%s$ définie par $%s(x)=%s$ sur $%s$." % (nomP,nomP,P(var),TeX_intervalle)]

    cor.append("\\par $%s'(x)=%s$\\\\" % (nomP,Pprime(var)))
    cor.append(u"Je dois étudier le signe de $%s'(%s)$ qui est un polynôme du second degré.\\par"%(nomP,var))

    delta,simplrac,racines,str_racines,factorisation=factorisation_degre2(Pprime,factorisation=False)
    #cor=redaction_factorisation(Pprime,nomP+"'",exo=[],cor=cor)[1]
    #cor.pop(-5)
    redaction_racines(Pprime,nomP+"'",var,cor)
    str_signe,str_valeurs,signes,ligne_valeurs=tableau_de_signe(Pprime,nomP+"'",delta,racines,cor,borneinf,bornesup,detail=True)

    #cor.append(tab_signe)


    if (delta<=0 and P[3]<0):
        cor+=u"Donc la fonction polynômiale $%s$ est décroissante sur $%s$." %(nomP,TeX_intervalle)
    elif (delta<=0 and P[3]>0):
        cor.append(u"Donc la fonction polynômiale $%s$ est croissante sur $%s$."%(nomP,TeX_intervalle))
    else:
        cor.append("On obtient ainsi le tableau de variation de $%s$."%nomP)
        [x1,x2]=racines
        #macro=[["txb","txh"],["fm","fd"]]

        var_de_P="\\tx{%s}& \\%s{\\rnode{neu0}{%s}}&&"%(nomP,["txb","txh"]["-"==signes[0]],TeX(P(ligne_valeurs[0])))
        compteur=0
        for i in range(0,len(signes)-1):
            if signes[i]=='+':
                if 0 and signes[i+1]=="+":
                    var_de_P+="&&"
                else:
                    compteur+=1
                    var_de_P+="\\txh{\\rnode{neu%s}{%s}}&&"%(compteur,TeX(P(ligne_valeurs[i+1])))
            else:
                if 0 and signes[i+1]=="-":
                    var_de_P+="&&"
                else:
                    compteur+=1
                    var_de_P+="\\txb{\\rnode{neu%s}{%s}}&&"%(compteur,TeX(P(ligne_valeurs[i+1])))
        compteur+=1
        if signes[-1]=="+":
            var_de_P+="\\txh{\\rnode{neu%s}{%s}}\\cr"%(compteur,TeX(P(ligne_valeurs[-1])))
        else:
            var_de_P+="\\txb{\\rnode{neu%s}{%s}}\\cr"%(compteur,TeX(P(ligne_valeurs[-1])))

        cor.append("$$ \\tabvar{\n %s\n %s\n %s}$$"%\
                   (str_valeurs,str_signe,var_de_P))
        for i in range(1,compteur+1):
            cor.append("\\ncline[nodesep=0.15,linewidth=0.5pt]{->}{neu%s}{neu%s}"%(i-1,i))
        if borneinf==float("-inf"):
            cor.append(u"$$\\lim_{%s\\to %s} %s= \\lim_{%s\\to %s} %s%s^3=%s $$  "%(var,"-\\infty",P,var,"-\\infty",P[3],var,TeX(P(float("-inf")))))
        if bornesup==float("+inf"):
            cor.append(u"$$\\lim_{%s\\to %s} %s= \\lim_{%s\\to %s} %s%s^3=%s  $$ "%(var,"+\\infty",P,var,"+\\infty",P[3],var,TeX(P(float("inf")))))
    return exo,cor