예제 #1
0
파일: affine.py 프로젝트: Lafrite/pyromaths
def tracefonc(f, i, A, B, xmin, xmax, ymin, ymax):
    """**tracefonc\ (*f*\ , *i*\ , *A*\ , *B*\ , *xmin*\ , *xmax*\ , *ymin*\ , *ymax*\ )

        *A* est sur l'axe des ordonnées, *f* est le nom de la fonction
        Génère la 2e queston et sa réponse

        >>> from pyromaths.classes.Fractions import Fraction
        >>> affine.tracefonc('f', 1, (0,-2),(3,2),-4,4,-4,-4)
        [u'Tracer la droite repr\xe9sentative ($d_1$) de la fonction $f:x\\longmapsto \\
            dfrac{4}{3}\\,x-2$.', 'On sait que $f(0)=-2$ et $f(-3)=\\dfrac{4}{3}\\times \\le
            ft( -3\\right) -2=\\dfrac{4\\times \\cancel{3}\\times -1}{\\cancel{3}\\times 1}-
            2=-4-2=-6', '\\psdot [dotsize=4.5pt,dotstyle=x](0, -2)', '\\psdot [dotsize=4.5pt
            ,dotstyle=x](-3, -6.0)']

        :rtype: list of string
        """
    u = coefdir(A, B)
    if isinstance(u, int) or u.d == 1:
        x1 = decimaux(B[0])
    else:
        B = (u.d, u.n + float(A[1]))
        if not dansrep(B, xmin, xmax, ymin, ymax):
            B = (-u.d, -u.n + float(A[1]))
        x1 = decimaux(str(B[0]))
    l = Priorites3.texify([Polynome([[u, 1], [A[1], 0]], "x")(B[0])])
    l.extend(Priorites3.texify(Priorites3.priorites(Polynome([[u, 1], [A[1], 0]], "x")(B[0]))))
    l = [u'Tracer la droite représentative ($d_' + str(i) + '$) de la fonction $' + f + ':x\\longmapsto ' + str(Polynome([[u, 1], [A[1], 0]], "x")) + '$.',
       'On sait que $' + f + '(0)=' + decimaux(str(A[1])) + '$ et $' + f + '(' + x1 + ')=' + "=".join(l) + "$.",
       '\\psdot [dotsize=4.5pt,dotstyle=x]' + str(A),
       '\\psdot [dotsize=4.5pt,dotstyle=x]' + str(B),
       ]
    return l
예제 #2
0
def id_rem():
    """Génère un exercice de développement des 3 identités remarquables avec une situation piège.
    Dans un premier temps, on n'utilise que des nombres entiers, puis des fractions, puis l'opposé 
    d'une expression littérale.
    """

    l = [randrange(1, 11) for dummy in range(14)]
    while pgcd(l[8], l[9]) != 1 or pgcd(l[10], l[11]) != 1 or (l[9] == 1 and l[11] == 1):
        # On crée deux rationnels irréductibles non tous deux entiers.
        l = [randrange(1, 11) for dummy in range(14)]
    lpoly = [id_rem1(l[0], l[1]), id_rem2(l[2], l[3]), id_rem3(l[4], l[5]), id_rem4(l[6], l[7])]
    shuffle(lpoly)
    lid = [id_rem1, id_rem2, id_rem3, id_rem4]
    lpoly2 = [lid.pop(randrange(4))(Fraction(l[8], l[9]), Fraction(l[10], l[11]))]
    lpoly2.append('-' + lid.pop(randrange(3))(l[12], l[13]))
    shuffle(lpoly2)
    lpoly.extend(lpoly2)
    expr = [Priorites3.texify([Priorites3.splitting(lpoly[i])]) for i in range(6)]
    exo = ["\\exercice", u"Développer chacune des expressions littérales suivantes :"]
    exo.append("\\begin{multicols}{2}")
    exo.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][0]) for i in range(6)]))
    exo.append("\\end{multicols}")
    cor = ["\\exercice*", u"Développer chacune des expressions littérales suivantes :"]
    cor.append("\\begin{multicols}{2}")
    for i in range(6):
        dev = Priorites3.texify(Priorites3.priorites(lpoly[i]))
        dev.insert(0, expr[i][0])
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), dev[j]) for j in range(len(dev) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), dev[-1]))
    cor.append("\\end{multicols}")

    return exo, cor
예제 #3
0
def corrige(nom, fct, ant):
    from pyromaths.outils import Priorites3
    sol = []
    calc = fct(ant)
    res = Priorites3.priorites(calc)
    res = Priorites3.texify(res)
    sol.append(r"\par $%s\,(%s)=%s$\par" % (nom, ant, Priorites3.texify([Priorites3.splitting(calc)])[0]))
    sol.append('\\par\n'.join(['$%s\\,(%s)=%s$' % (nom, ant, res[j]) for j in range(len(res) - 1)]))
    sol.append(r'\par')
    sol.append('\\fbox{$%s\\,(%s)=%s$}\\\\\n' % (nom, ant, res[-1]))
    return sol
예제 #4
0
def corrige(nom, fct, ant):
    from pyromaths.outils import Priorites3
    sol = []
    calc = fct(ant)
    res = Priorites3.priorites(calc)
    res = Priorites3.texify(res)
    sol.append(r"\par $%s\,(%s)=%s$\par" %
               (nom, ant, Priorites3.texify([Priorites3.splitting(calc)])[0]))
    sol.append('\\par\n'.join(
        ['$%s\\,(%s)=%s$' % (nom, ant, res[j]) for j in range(len(res) - 1)]))
    sol.append(r'\par')
    sol.append('\\fbox{$%s\\,(%s)=%s$}\\\\\n' % (nom, ant, res[-1]))
    return sol
예제 #5
0
def factorisation():
    """Génère un exercice de factorisation utilisant les identités remarquables ou
    la distributivité
    """
    l = [randrange(1, 11) for dummy in range(21)]
    diff = [True, False, False]
    shuffle(diff)
    exo = [id_rem1, id_rem2]
    lexo = [exo[randrange(2)](l[0], l[1])]
    lexo.append(id_rem3(l[2], l[3]))
    lexo.append(id_rem3bis(l[4], l[5], l[6]))
    lexo.append(facteur_commun1(l[7:13], diff=diff.pop()))
    shuffle(lexo)
    exo = [facteur_commun2, facteur_commun3]
    shuffle(exo)
    lexo.append(exo[0](l[13:17], diff=diff.pop()))
    lexo.append(exo[1](l[17:21], diff=diff.pop()))

    exo = [
        "\\exercice",
        u"Factoriser chacune des expressions littérales suivantes :"
    ]
    exo.append("\\begin{multicols}{2}")
    cor = [
        "\\exercice*",
        u"Factoriser chacune des expressions littérales suivantes :"
    ]
    cor.append("\\begin{multicols}{2}")
    for i in range(len(lexo)):
        p = [lexo[i]]
        while True:
            fact = factoriser(p[-1])
            if fact:
                p.append(fact)
            else:
                break
        p = Priorites3.texify(
            [Priorites3.splitting(p[j]) for j in range(len(p))])
        cor.append('\\\\\n'.join(
            ['$%s=%s$' % (chr(i + 65), p[j]) for j in range(len(p) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), p[-1]))
    exo.append('\\\\\n'.join([
        '$%s=%s$' %
        (chr(i + 65), Priorites3.texify([Priorites3.splitting(lexo[i])])[0])
        for i in range(len(lexo))
    ]))
    exo.append("\\end{multicols}")
    cor.append("\\end{multicols}")
    return exo, cor
예제 #6
0
 def tex_answer(self):
     exo = [r'\exercice*']
     exo.append(_(u'Donner la forme canonique des polynômes $P$ , $Q$ , $R$ et $S$ .'))
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ', r'S\,(x) &= ']
     exercice = list(self.exercice)
     for i in range(len(exercice)):
         exercice[i] = Priorites3.texify(exercice[i])
         exercice[i][0] = noms[i] + exercice[i][0]  # [0]
         for j in range(1, len(exercice[i]) - 1):
             exercice[i][j] = r' &= ' + exercice[i][j]
         exercice[i][-1] = r'\Aboxed{' + noms[i] + exercice[i][-1] + r'}'
     tri = []
     for i in range(len(exercice)):
         tri.append((i, len(exercice[i])))
     tri = sorted(tri, key=lambda nblgn: nblgn[1])
     if tri[0][0] < tri[1][0]:
         exercice[tri[0][0]].extend(exercice.pop(tri[1][0]))
     else:
         exercice[tri[1][0]].extend(exercice.pop(tri[0][0]))
     exo.append(r'\begin{align*}')
     for j in range(max(len(exercice[0]), len(exercice[1]), len(exercice[2]))):
         sol = ''
         for i in range(3):
             if j < len(exercice[i]):
                 sol += exercice[i][j]
             else:
                 sol += r'& '
             if i == 2:
                 sol += r'\\'
             else:
                 sol += r' & '
         exo.append(sol)
     exo.append(r'\end{align*}')
     return exo
예제 #7
0
 def tex_answer(self):
     exo = [r'\exercice*']
     exo.append(_(u'Donner la forme canonique des polynômes $P$ , $Q$ , $R$ et $S$ .'))
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ', r'S\,(x) &= ']
     exercice = list(self.exercice)
     for i in range(len(exercice)):
         exercice[i] = Priorites3.texify(exercice[i])
         exercice[i][0] = noms[i] + exercice[i][0]  # [0]
         for j in range(1, len(exercice[i]) - 1):
             exercice[i][j] = r' &= ' + exercice[i][j]
         exercice[i][-1] = r'\Aboxed{' + noms[i] + exercice[i][-1] + r'}'
     tri = []
     for i in range(len(exercice)):
         tri.append((i, len(exercice[i])))
     tri = sorted(tri, key=lambda nblgn: nblgn[1])
     if tri[0][0] < tri[1][0]:
         exercice[tri[0][0]].extend(exercice.pop(tri[1][0]))
     else:
         exercice[tri[1][0]].extend(exercice.pop(tri[0][0]))
     exo.append(r'\begin{align*}')
     for j in range(max(len(exercice[0]), len(exercice[1]), len(exercice[2]))):
         sol = ''
         for i in range(3):
             if j < len(exercice[i]):
                 sol += exercice[i][j]
             else:
                 sol += r'& '
             if i == 2:
                 sol += r'\\'
             else:
                 sol += r' & '
         exo.append(sol)
     exo.append(r'\end{align*}')
     return exo
예제 #8
0
 def tex_statement(self):
     exo = [r'\exercice']
     exo.append(_(u'Résoudre les équations :'))
     exo.append('\\begin{align*}')
     for e in self.exercice:
         if len(e) == 2:
             exo.append(Priorites3.texify([[repr(Polynome(e[0])), '*', repr(Polynome(e[1]))]])[0] + ' &= 0 & ')
         else:
             exo.append(r'\cfrac{%s}{%s} &= %s & ' % (Polynome(e[0]), Polynome(e[1]), Polynome(e[2])))
     exo[-1] = exo[-1][:-3]  # Suppression du dernier  " &"
     exo.append('\\end{align*}')
     return exo
예제 #9
0
 def tex_statement(self):
     exo = [r'\exercice']
     exo.append(_(u'Résoudre les équations :'))
     exo.append('\\begin{align*}')
     for e in self.exercice:
         if len(e) == 2:
             exo.append(Priorites3.texify([[repr(Polynome(e[0])), '*', repr(Polynome(e[1]))]])[0] + ' &= 0 & ')
         else:
             exo.append(r'\cfrac{%s}{%s} &= %s & ' % (Polynome(e[0]), Polynome(e[1]), Polynome(e[2])))
     exo[-1] = exo[-1][:-3]  # Suppression du dernier  " &"
     exo.append('\\end{align*}')
     return exo
예제 #10
0
파일: affine.py 프로젝트: Azixx/pyromaths
def tracefonc(f, i, A, B, xmin, xmax, ymin, ymax):
    """**tracefonc\ (*f*\ , *i*\ , *A*\ , *B*\ , *xmin*\ , *xmax*\ , *ymin*\ , *ymax*\ )

        *A* est sur l'axe des ordonnées, *f* est le nom de la fonction
        Génère la 2e queston et sa réponse

        >>> from pyromaths.classes.Fractions import Fraction
        >>> affine.tracefonc('f', 1, (0,-2),(3,2),-4,4,-4,-4)
        [u'Tracer la droite repr\xe9sentative ($d_1$) de la fonction $f:x\\longmapsto \\
            dfrac{4}{3}\\,x-2$.', 'On sait que $f(0)=-2$ et $f(-3)=\\dfrac{4}{3}\\times \\le
            ft( -3\\right) -2=\\dfrac{4\\times \\cancel{3}\\times -1}{\\cancel{3}\\times 1}-
            2=-4-2=-6', '\\psdot [dotsize=4.5pt,dotstyle=x](0, -2)', '\\psdot [dotsize=4.5pt
            ,dotstyle=x](-3, -6.0)']

        :rtype: list of string
        """
    u = coefdir(A, B)
    if isinstance(u, int) or u.d == 1:
        x1 = decimaux(B[0])
    else:
        B = (u.d, u.n + float(A[1]))
        if not dansrep(B, xmin, xmax, ymin, ymax):
            B = (-u.d, -u.n + float(A[1]))
        x1 = decimaux(str(B[0]))
    l = Priorites3.texify([Polynome([[u, 1], [A[1], 0]], "x")(B[0])])
    l.extend(
        Priorites3.texify(
            Priorites3.priorites(Polynome([[u, 1], [A[1], 0]], "x")(B[0]))))
    l = [
        u'Tracer la droite représentative ($d_' + str(i) +
        '$) de la fonction $' + f + ':x\\longmapsto ' +
        str(Polynome([[u, 1], [A[1], 0]], "x")) + '$.',
        'On sait que $' + f + '(0)=' + decimaux(str(A[1])) + '$ et $' + f +
        '(' + x1 + ')=' + "=".join(l) + "$.",
        '\\psdot [dotsize=4.5pt,dotstyle=x]' + str(A),
        '\\psdot [dotsize=4.5pt,dotstyle=x]' + str(B),
    ]
    return l
예제 #11
0
 def print_coef(coef):
     """Gère le format du coef
     """
     if isinstance(coef, (float, int)):
         if coef > 0: return "+" + decimaux(coef)
         else: return decimaux(coef)
     if isinstance(coef, Fraction):
         if isinstance(coef.n, int) and isinstance(coef.d, int) and coef.n < 0 and coef.d > 0:
             return "-" + str(Fraction(-coef.n, coef.d, coef.code))
         return "+" + str(coef)
     if isinstance(coef, str):
         texte = "(" + "".join(Priorites3.texify([Priorites3.splitting(coef)])) + ")"
         if texte[0] != "-": return "+" + texte
         else: return texte
예제 #12
0
def factorisation():
    """Génère un exercice de factorisation utilisant les identités remarquables ou
    la distributivité
    """
    l = [randrange(1, 11) for dummy in range(21)]
    diff = [True, False, False]
    shuffle(diff)
    exo = [id_rem1, id_rem2]
    lexo = [exo[randrange(2)](l[0], l[1])]
    lexo.append(id_rem3(l[2], l[3]))
    lexo.append(id_rem3bis(l[4], l[5], l[6]))
    lexo.append(facteur_commun1(l[7:13], diff=diff.pop()))
    shuffle(lexo)
    exo = [facteur_commun2, facteur_commun3]
    shuffle(exo)
    lexo.append(exo[0](l[13:17], diff=diff.pop()))
    lexo.append(exo[1](l[17:21], diff=diff.pop()))

    exo = ["\\exercice", u"Factoriser chacune des expressions littérales suivantes :"]
    exo.append("\\begin{multicols}{2}")
    cor = ["\\exercice*", u"Factoriser chacune des expressions littérales suivantes :"]
    cor.append("\\begin{multicols}{2}")
    for i in range(len(lexo)):
        p = [lexo[i]]
        while True:
            fact = factoriser(p[-1])
            if fact:
                p.append(fact)
            else: break
        p = Priorites3.texify([Priorites3.splitting(p[j]) for j in range(len(p))])
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), p[j]) for j in range(len(p) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), p[-1]))
    exo.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), Priorites3.texify([Priorites3.splitting(lexo[i])])[0]) for i in range(len(lexo))]))
    exo.append("\\end{multicols}")
    cor.append("\\end{multicols}")
    return exo, cor
예제 #13
0
 def tex_statement(self):
     exo = [r'\exercice']
     exo.append(_(u'Donner la forme canonique des polynômes $P$ , $Q$ , $R$ et $S$ .'))
     exo.append(r'\begin{align*}')
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ', r'S\,(x) &= ']
     exercice = list(self.exercice)
     sol = ''
     for i in range(len(exercice)):
         exercice[i][0] = Priorites3.texify(exercice[i][0])
         sol += noms[i] + exercice[i][0][0]
         if i < len(exercice) - 1: sol += r' & '
         else: sol += r' \\ '
     exo.append(sol)
     exo.append(r'\end{align*}')
     return exo
예제 #14
0
 def tex_statement(self):
     exo = [r'\exercice']
     exo.append(_(u'Donner la forme canonique des polynômes $P$ , $Q$ , $R$ et $S$ .'))
     exo.append(r'\begin{align*}')
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ', r'S\,(x) &= ']
     exercice = list(self.exercice)
     sol = ''
     for i in range(len(exercice)):
         exercice[i][0] = Priorites3.texify(exercice[i][0])
         sol += noms[i] + exercice[i][0][0]
         if i < len(exercice) - 1: sol += r' & '
         else: sol += r' \\ '
     exo.append(sol)
     exo.append(r'\end{align*}')
     return exo
 def print_coef(coef):
     """Gère le format du coef
     """
     if isinstance(coef, (float, int)):
         if coef > 0: return "+" + decimaux(coef)
         else: return decimaux(coef)
     if isinstance(coef, Fraction):
         if isinstance(coef.n, int) and isinstance(
                 coef.d, int) and coef.n < 0 and coef.d > 0:
             return "-" + str(Fraction(-coef.n, coef.d, coef.code))
         return "+" + str(coef)
     if isinstance(coef, str):
         texte = "(" + "".join(
             Priorites3.texify([Priorites3.splitting(coef)])) + ")"
         if texte[0] != "-": return "+" + texte
         else: return texte
예제 #16
0
 def tex_answer(self):
     exo = [r'\exercice*']
     exo.append(_(u'Déterminer les racines des polynômes :\\par'))
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ']
     r = ''
     question = [[], [], []]
     for i in range(3):
         p = []
         m = Polynome(list(self.exercice[i])).ordonne()
         if factoriser('%r' % Polynome(m)):
             p = [factoriser('%r' % Polynome(m))]
             while factoriser(p[-1]):
                 p.append(factoriser(p[-1]))
         if p and eval(Priorites3.splitting(p[-1])[0]).degre() > 0:
             tmp = Priorites3.texify([Priorites3.splitting(p[j]) for j in range(len(p))])
             question[i].append('{$\\! \\begin{aligned}')
             question[i].append(noms[i] + str(Polynome(m, 'x')) + r'\\')
             question[i].append('\\\\\n'.join(['&=%s' % (tmp[j]) for j in range(len(tmp))]))
             question[i].append(r'\end{aligned}$}\par')
             lp = Priorites3.splitting(p[-1])
             racines = []
             for e in lp:
                 if e[:9] == 'Polynome(':
                     e = eval(e)
                     if len(e) == 2:
                         racines.append(str(Fraction(-e[1][0], e[0][0]).simplifie()))
                     else:
                         racines.append('0')
             if len(racines) > 1:
                 question[i].append(_(u'\\underline{Les racines de $%s$ sont }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), '$}\\underline{ et }\\fbox{$'.join(racines)))
             elif len(racines) == 1:
                 question[i].append(_(u'\\underline{L\'unique racine de $%s$ est }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), racines[0]))
         elif len(m) == 2 and m[0][1] == 2 and m[1][1] == 0 and m[0][0] * m[1][0] > 0:
             question[i].append('$' + noms[i] + str(Polynome(m, 'x')) + r'$\par')
             question[i][-1] = question[i][-1].replace('&', '')
             if m[1][0] > 0: question[i].append('$' + noms[i][:7] + ' \\ge %r$' % m[1][0])
             else: question[i].append('$' + noms[i][:7] + ' \\le %r$' % m[1][0])
             question[i].append(_(u'car un carré est toujours positif.\\par\n\\underline{$%s$ n\'a donc pas de racine.}') % (noms[i].rstrip(r' &= ')))
         else:
             question[i].append('$' + noms[i] + str(Polynome(m, 'x')) + r'\quad$')
             question[i][-1] = question[i][-1].replace('&', '')
             question[i].append(_(u'On calcule le discriminant de $%s$ avec $a=%s$, $b=%s$ et $c=%s$ :\\par\\medskip') % (noms[i].rstrip(r' &= '), m[0][0], m[1][0], m[2][0]))
             question[i].append(r'\begin{tabularx}{\linewidth}[t]{XXX}')
             question[i].append(r'{$\! \begin{aligned}')
             sol = [[str(m[1][0]), '**', '2', '-', '4', '*', str(m[0][0]), '*', str(m[2][0])]]
             sol.extend(Priorites3.priorites('%s**2-4*%s*%s' % (m[1][0], m[0][0], m[2][0])))
             solTeX = Priorites3.texify(sol)
             for s in solTeX:
                 question[i].append(u'\\Delta &= %s\\\\' % s)
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'&')
             question[i].append(r'{$\! \begin{aligned}')
             delta = sol[-1][0]
             sol = [['Fraction(SquareRoot([[%s, None], [-1, %s]]),\'2*%s\')' % (-m[1][0], delta, m[0][0])]]
             sol.extend(Priorites3.priorites(sol[0][0]))
             sol = Priorites3.texify(sol)
             for s in sol:
                 question[i].append(u'x_1 &= %s\\\\' % s)
             racines = [sol[-1]]
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'&')
             question[i].append(r'{$\! \begin{aligned}')
             sol = [['Fraction(SquareRoot([[%s, None], [1, %s]]),\'2*%s\')' % (-m[1][0], delta, m[0][0])]]
             sol.extend(Priorites3.priorites(sol[0][0]))
             sol = Priorites3.texify(sol)
             for s in sol:
                 question[i].append(u'x_2 &= %s\\\\' % s)
             racines.append(sol[-1])
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'\end{tabularx}\par')
             question[i].append(_(u'\\underline{Les racines de $%s$ sont }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), _('$}\\underline{ et }\\fbox{$').join(racines)))
             if i == 1: question.append(question[1])
     if len(question) == 4:
         question.pop(1)
     if question[0][0][-6:] == r'\quad$':
         question[1].insert(0, r'\par\medskip\begin{tabularx}{\linewidth}[t]{XX}')
         question[2].insert(0, r'&')
         question[2].append(r'\end{tabularx}\par\medskip')
     else:
         question[0].insert(0, r'\begin{tabularx}{\linewidth}[t]{XX}')
         question[1].insert(0, r'&')
         question[1].append(r'\end{tabularx}\par\medskip')
     for i in range(3): exo.extend(question[i])
     return exo
예제 #17
0
 def tex_answer(self):
     exo = [r'\exercice*']
     exo.append(_(u'Déterminer les racines des polynômes :\\par'))
     noms = [r'P\,(x) &= ', r'Q\,(x) &= ', r'R\,(x) &= ']
     r = ''
     question = [[], [], []]
     for i in range(3):
         p = []
         m = Polynome(list(self.exercice[i])).ordonne()
         if factoriser('%r' % Polynome(m)):
             p = [factoriser('%r' % Polynome(m))]
             while factoriser(p[-1]):
                 p.append(factoriser(p[-1]))
         if p and eval(Priorites3.splitting(p[-1])[0]).degre() > 0:
             tmp = Priorites3.texify([Priorites3.splitting(p[j]) for j in range(len(p))])
             question[i].append('{$\\! \\begin{aligned}')
             question[i].append(noms[i] + str(Polynome(m, 'x')) + r'\\')
             question[i].append('\\\\\n'.join(['&=%s' % (tmp[j]) for j in range(len(tmp))]))
             question[i].append(r'\end{aligned}$}\par')
             lp = Priorites3.splitting(p[-1])
             racines = []
             for e in lp:
                 if e[:9] == 'Polynome(':
                     e = eval(e)
                     if len(e) == 2:
                         racines.append(str(Fraction(-e[1][0], e[0][0]).simplifie()))
                     else:
                         racines.append('0')
             if len(racines) > 1:
                 question[i].append(_(u'\\underline{Les racines de $%s$ sont }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), '$}\\underline{ et }\\fbox{$'.join(racines)))
             elif len(racines) == 1:
                 question[i].append(_(u'\\underline{L\'unique racine de $%s$ est }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), racines[0]))
         elif len(m) == 2 and m[0][1] == 2 and m[1][1] == 0 and m[0][0] * m[1][0] > 0:
             question[i].append('$' + noms[i] + str(Polynome(m, 'x')) + r'$\par')
             question[i][-1] = question[i][-1].replace('&', '')
             if m[1][0] > 0: question[i].append('$' + noms[i][:7] + ' \\geqslant %r$' % m[1][0])
             else: question[i].append('$' + noms[i][:7] + ' \\leqslant %r$' % m[1][0])
             question[i].append(_(u'car un carré est toujours positif.\\par\n\\underline{$%s$ n\'a donc pas de racine.}') % (noms[i].rstrip(r' &= ')))
         else:
             question[i].append('$' + noms[i] + str(Polynome(m, 'x')) + r'\quad$')
             question[i][-1] = question[i][-1].replace('&', '')
             question[i].append(_(u'On calcule le discriminant de $%s$ avec $a=%s$, $b=%s$ et $c=%s$ :\\par\\medskip') % (noms[i].rstrip(r' &= '), m[0][0], m[1][0], m[2][0]))
             question[i].append(r'\begin{tabularx}{\linewidth}[t]{XXX}')
             question[i].append(r'{$\! \begin{aligned}')
             if m[1][0]>0:
                 sol = [[str(m[1][0]), '**', '2', '-', '4', '*', str(m[0][0]), '*', str(m[2][0])]]
                 sol.extend(Priorites3.priorites('%s**2-4*%s*%s' % (m[1][0], m[0][0], m[2][0])))
             else:
                 sol = [['(', str(m[1][0]), ')', '**', '2', '-', '4', '*', str(m[0][0]), '*', str(m[2][0])]]
                 sol.extend(Priorites3.priorites('(%s)**2-4*%s*%s' % (m[1][0], m[0][0], m[2][0])))
             solTeX = Priorites3.texify(sol)
             for s in solTeX:
                 question[i].append(u'\\Delta &= %s\\\\' % s)
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'&')
             question[i].append(r'{$\! \begin{aligned}')
             delta = sol[-1][0]
             print(sol)
             sol = [['Fraction(SquareRoot([[%s, None], [-1, %s]]),\'2*%s\')' % (-m[1][0], delta, m[0][0])]]
             sol.extend(Priorites3.priorites(sol[0][0]))
             sol = Priorites3.texify(sol)
             for s in sol:
                 question[i].append(u'x_1 &= %s\\\\' % s)
             racines = [sol[-1]]
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'&')
             question[i].append(r'{$\! \begin{aligned}')
             sol = [['Fraction(SquareRoot([[%s, None], [1, %s]]),\'2*%s\')' % (-m[1][0], delta, m[0][0])]]
             sol.extend(Priorites3.priorites(sol[0][0]))
             sol = Priorites3.texify(sol)
             for s in sol:
                 question[i].append(u'x_2 &= %s\\\\' % s)
             racines.append(sol[-1])
             question[i].append(r'\end{aligned}$}')
             question[i].append(r'\end{tabularx}\par')
             question[i].append(_(u'\\underline{Les racines de $%s$ sont }\\fbox{$%s$}') % (noms[i].rstrip(r' &= '), _('$}\\underline{ et }\\fbox{$').join(racines)))
             if i == 1: question.append(question[1])
     if len(question) == 4:
         question.pop(1)
     if question[0][0][-6:] == r'\quad$':
         question[1].insert(0, r'\par\medskip\begin{tabularx}{\linewidth}[t]{XX}')
         question[2].insert(0, r'&')
         question[2].append(r'\end{tabularx}\par\medskip')
     else:
         question[0].insert(0, r'\begin{tabularx}{\linewidth}[t]{XX}')
         question[1].insert(0, r'&')
         question[1].append(r'\end{tabularx}\par\medskip')
     for i in range(3): exo.extend(question[i])
     return exo