Example #1
0
    def __init__(self):
        """
        l1, l2 et l3 sont les abscisses remarquables,
        y1, y2 et y3 sont les ordonnées correspondantes

        l1 contient trois abscisses de même ordonnée
        l2 contient deux abscisses de même ordonnée
        l3 contient 2 abscisses séparées d'un dixième (un extremum local j'espère) de même ordonnée
        """
        End = False
        while End == False:
            encore = True
            while encore:
                l1 = [a for a in range(-6, 7)]
                for dummy in range(10):
                    l1.pop(randrange(len(l1)))
                if l1[2] - l1[1] > 3 and l1[1] - l1[0] > 3: encore = False
            pos = randrange(2)
            l2 = randrange(1, 4) / 2.
            l2 = [l1[pos] + l2, l1[pos + 1] - l2]
            l3 = [(l1[(pos + 1) % 2] + l1[(pos + 1) % 2 + 1]) / 2.]
            l1.extend(l2)
            l1.extend(l3)
            y = [
                randrange(2) * (-1)**randrange(2),
                randrange(3, 5) * (-1)**randrange(2)
            ]
            # if randrange(2): y[0], y[2] = y[2], y[0]
            #=======================================================================
            # y = [y[1], y[1], y[1], y[0], y[0], y[2], y[2]]
            #=======================================================================
            y = [y[1], y[1], y[1], y[0], y[0], y[0]]
            self.points = list([(l1[i], y[i]) for i in range(6)])
            p = Lagrange(self.points)
            self.polynome = eval(Priorites3.priorites(p)[-1][0])
            End = True
            for val in range(13):
                #===============================================================
                # try:
                #     ordonnee = eval(self.polynome(val - 6))
                # except:
                #     print repr(self.polynome), val - 6
                # if isinstance(ordonnee, str):
                #     ordonnee = eval(Priorites3.priorites(ordonnee)[-1][0])
                #===============================================================
                try:
                    ordonnee = eval(
                        Priorites3.priorites(self.polynome(val - 6))[-1][0])
                except IndexError:
                    ordonnee = eval(self.polynome(val - 6))
                if ordonnee > 5 or ordonnee < -5:
                    End = False
                    break
Example #2
0
 def resolution(self, m, pre=[], post=[]):
     sgn = '+-'[m[1][0] < 0]
     if isinstance(m[1][0], Fraction):
         b = Priorites3.priorites(abs(m[1][0]) / 2)[-1][0]
     elif m[1][0] % 2:
         b = 'Fraction(%s, 2)' % abs(m[1][0])
     else:
         b = abs(m[1][0]) / 2
     fc = ['Polynome("%sx%s%s")' % (m[0][0], sgn, b), '**', '2']
     reste = ['-']
     if m[2][0] > 0 or isinstance(m[2][0], Fraction):
         reste.extend(Priorites3.splitting('%s**2+%r' % (b, m[2][0])))
     else:
         reste.extend(Priorites3.splitting('%s**2%r' % (b, m[2][0])))
     etapes = list(pre)
     etapes.extend(fc)
     etapes.extend(reste)
     etapes.extend(post)
     etapes = [etapes]
     for unreste in Priorites3.priorites(''.join(reste)):
         calcul = list(pre)
         calcul.extend(fc)
         if unreste[0][0] != '-':
             calcul.append('+')
         else:
             calcul.append('-')
             unreste[0] = unreste[0][1:]
         calcul.extend(unreste)
         calcul.extend(post)
         etapes.append(calcul)
     if isinstance(b, str):  # On supprime deux étapes trop détaillée UGLY
         # TODO: Corriger la classe Fractions pour qu'elle gère plusieurs niveaux de détails.
         etapes.pop(1)
         etapes.pop(1)
     if pre:
         calcul = pre[0:-1]
         calcul.extend(fc)
         fc = list(calcul)
         reste = Priorites3.priorites(''.join(reste))[-1]
         reste.extend(['*', pre[0]])
         for unreste in Priorites3.priorites(''.join(reste)):
             calcul = list(fc)
             if unreste[0][0] != '-':
                 calcul.append('+')
             else:
                 calcul.append('-')
                 unreste[0] = unreste[0][1:]
             calcul.extend(unreste)
             etapes.append(calcul)
     return etapes
Example #3
0
 def resolution(self, m, pre=[], post=[]):
     sgn = '+-'[m[1][0] < 0]
     if isinstance(m[1][0], Fraction):
         b = Priorites3.priorites(abs(m[1][0]) / 2)[-1][0]
     elif m[1][0] % 2:
         b = 'Fraction(%s, 2)' % abs(m[1][0])
     else:
         b = abs(m[1][0]) / 2
     fc = ['Polynome("%sx%s%s")' % (m[0][0], sgn, b), '**', '2']
     reste = ['-']
     if m[2][0] > 0 or isinstance(m[2][0], Fraction):
         reste.extend(Priorites3.splitting('%s**2+%r' % (b, m[2][0])))
     else:
         reste.extend(Priorites3.splitting('%s**2%r' % (b, m[2][0])))
     etapes = list(pre)
     etapes.extend(fc)
     etapes.extend(reste)
     etapes.extend(post)
     etapes = [etapes]
     for unreste in Priorites3.priorites(''.join(reste)):
         calcul = list(pre)
         calcul.extend(fc)
         if unreste[0][0] != '-':
             calcul.append('+')
         else:
             calcul.append('-')
             unreste[0] = unreste[0][1:]
         calcul.extend(unreste)
         calcul.extend(post)
         etapes.append(calcul)
     if isinstance(b, str):  # On supprime deux étapes trop détaillée UGLY
         # TODO: Corriger la classe Fractions pour qu'elle gère plusieurs niveaux de détails.
         etapes.pop(1)
         etapes.pop(1)
     if pre:
         calcul = pre[0:-1]
         calcul.extend(fc)
         fc = list(calcul)
         reste = Priorites3.priorites(''.join(reste))[-1]
         reste.extend(['*', pre[0]])
         for unreste in Priorites3.priorites(''.join(reste)):
             calcul = list(fc)
             if unreste[0][0] != '-':
                 calcul.append('+')
             else:
                 calcul.append('-')
                 unreste[0] = unreste[0][1:]
             calcul.extend(unreste)
             etapes.append(calcul)
     return etapes
Example #4
0
    def __init__(self):
        """
        l1, l2 et l3 sont les abscisses remarquables,
        y1, y2 et y3 sont les ordonnées correspondantes

        l1 contient trois abscisses de même ordonnée
        l2 contient deux abscisses de même ordonnée
        l3 contient 2 abscisses séparées d'un dixième (un extremum local j'espère) de même ordonnée
        """
        End = False
        while End == False:
            encore = True
            while encore:
                l1 = [a for a in range(-6, 7)]
                for dummy in range(10):
                    l1.pop(randrange(len(l1)))
                if l1[2] - l1[1] > 3 and l1[1] - l1[0] > 3: encore = False
            pos = randrange(2)
            l2 = randrange(1, 4) / 2.
            l2 = [l1[pos] + l2, l1[pos + 1] - l2]
            l3 = [(l1[(pos + 1) % 2] + l1[(pos + 1) % 2 + 1]) / 2.]
            l1.extend(l2)
            l1.extend(l3)
            y = [randrange(2) * (-1) ** randrange(2), randrange(3, 5) * (-1) ** randrange(2)]
            # if randrange(2): y[0], y[2] = y[2], y[0]
            #=======================================================================
            # y = [y[1], y[1], y[1], y[0], y[0], y[2], y[2]]
            #=======================================================================
            y = [y[1], y[1], y[1], y[0], y[0], y[0]]
            self.points = list([(l1[i], y[i]) for i in range(6)])
            p = notion_de_fonction.Lagrange(self.points)
            self.polynome = eval(Priorites3.priorites(p)[-1][0])
            End = True
            for val in range(13):
                #===============================================================
                # try:
                #     ordonnee = eval(self.polynome(val - 6))
                # except:
                #     print repr(self.polynome), val - 6
                # if isinstance(ordonnee, str):
                #     ordonnee = eval(Priorites3.priorites(ordonnee)[-1][0])
                #===============================================================
                try:
                    ordonnee = eval(Priorites3.priorites(self.polynome(val - 6))[-1][0])
                except IndexError:
                    ordonnee = eval(self.polynome(val - 6))
                if ordonnee > 5 or ordonnee < -5:
                    End = False
                    break
Example #5
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
Example #6
0
 def __call__(
     self,
     x,
 ):
     '''renvoie la Fraction ou l'int P(x)'''
     if x == float("inf") or x == float("-inf"):
         if self.degre_max == 0:
             return self[0]
         elif self.deg % 2 == 0:
             return self[self.deg] * float("inf")
         else:
             return self[self.deg] * x
     elif isinstance(x, str):
         return self.TeX(var=x)
     else:
         result = 0
         for i in self.dictio.iterkeys():
             result = result + self[i] * x**i
         if isinstance(result, str):
             result = eval(Priorites3.priorites(result)[-1][0])
         if isinstance(result, (int, float)):
             return result
         elif isinstance(result, Fraction):
             result = result.simplifie()
             if isinstance(result, int):
                 return result
             if result.d == 1:
                 return result.n
             else:
                 return result
         elif result.denominateur == 1:
             return result.numerateur
         else:
             return result
Example #7
0
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
Example #8
0
 def __call__(self, x,):
     '''renvoie la Fraction ou l'int P(x)'''
     if x == float("inf") or x == float("-inf"):
         if self.degre_max == 0:
             return self[0]
         elif self.deg % 2 == 0:
             return self[self.deg] * float("inf")
         else:
             return self[self.deg] * x
     elif isinstance(x, str):
         return self.TeX(var=x)
     else:
         result = 0
         for i in self.dictio.iterkeys():
             result = result + self[i] * x ** i
         if isinstance(result, str):
             result = eval(Priorites3.priorites(result)[-1][0])
         if isinstance(result, (int, float)):
             return result
         elif isinstance(result, Fraction):
             result = result.simplifie()
             if isinstance(result, int):
                 return result
             if result.d == 1:
                 return result.n
             else:
                 return result
         elif result.denominateur == 1:
             return result.numerateur
         else:
             return result
Example #9
0
def racines(p, lracines):
    """ Trouve les 2 racines manquantes d'un polynôme de degré 5 connaissant 3 des racines
    """
    q = Polynome(p)
    for r in lracines:
        q = q // Polynome("x-%s" % r)
    delta = q[1][0] ** 2 - 4 * q[0][0] * q[2][0]
    d = float(eval(Priorites3.priorites(delta)[-1][0]))
    return (-float(q[1][0]) + sqrt(d)) / 2 / float(q[0][0]), (-float(q[1][0]) - sqrt(d)) / 2 / float(q[0][0])
Example #10
0
def racines(p, lracines):
    """ Trouve les 2 racines manquantes d'un polynôme de degré 5 connaissant 3 des racines
    """
    q = Polynome(p)
    for r in lracines:
        q = q // Polynome("x-%s" % r)
    delta = q[1][0]**2 - 4 * q[0][0] * q[2][0]
    d = float(eval(Priorites3.priorites(delta)[-1][0]))
    return (-float(q[1][0]) + sqrt(d)) / 2 / float(
        q[0][0]), (-float(q[1][0]) - sqrt(d)) / 2 / float(q[0][0])
Example #11
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
Example #12
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
Example #13
0
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
Example #14
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
Example #15
0
def notion_fonction():
    """Créé un exercice bilan sur la notion de fonction"""
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.outils import Priorites3
    fct = [eval(creer_fonction(1)), eval(creer_fonction(2))]
    ant = [
        randrange(1, 6) * (-1)**fct[0].degre(),
        randrange(1, 6) * (-1)**fct[1].degre(),
        randrange(1, 6) * (-1)**fct[1].degre(),
        randrange(1, 6) * (-1)**fct[0].degre()
    ]
    shuffle(fct)
    val_exo2 = choix_points(nb=7)
    exo = [
        r"\exercice", r"\begin{multicols}{2}", r"\begin{enumerate}",
        u"\\item On donne"
    ]
    exo.append(r"$\begin{array}[t]{l}")
    exo.append(u"f:~x \\longmapsto %s \\\\ g:~x \\longmapsto %s" %
               (fct[0], fct[1]))
    exo.extend([
        r"\end{array}$",
        r"\begin{enumerate}",
    ])
    exo.append(u"\\item Quelle est l'image de $%s$ par la fonction $f$ ?" %
               ant[0])
    cor = [
        r"\exercice", r"\begin{multicols}{2}", r"\begin{enumerate}",
        u"\\item On donne"
    ]
    cor.append(r"$\begin{array}[t]{l}")
    cor.append(u"f:~x \\longmapsto %s \\\\ g:~x \\longmapsto %s" %
               (fct[0], fct[1]))
    cor.extend([
        r"\end{array}$",
        r"\begin{enumerate}",
    ])
    cor.append(u"\\item Quelle est l'image de $%s$ par la fonction $f$ ?" %
               ant[0])
    cor.extend(corrige('f', fct[0], ant[0]))
    exo.append(u"\\item Quelle est l'image de $%s$ par la fonction $g$ ?" %
               ant[1])
    cor.append(u"\\item Quelle est l'image de $%s$ par la fonction $g$ ?" %
               ant[1])
    cor.extend(corrige('g', fct[1], ant[1]))
    exo.append(u"\\item Calculer $f\\,(%s)$." % ant[2])
    cor.append(u"\\item Calculer $f\\,(%s)$." % ant[2])
    cor.extend(corrige('f', fct[0], ant[2]))
    exo.append(u"\\item Calculer $g\\,(%s)$." % ant[3])
    cor.append(u"\\item Calculer $g\\,(%s)$." % ant[3])
    cor.extend(corrige('g', fct[1], ant[3]))
    exo.append(r"\end{enumerate}")
    cor.append(r"\end{enumerate}")
    exo.append(
        u"\\item Voici un tableau de valeurs correspondant à une fonction $h$.\\par"
    )
    exo.append(r"\renewcommand{\arraystretch}{1.5}")
    exo.append(r"\begin{tabularx}{\linewidth}[t]{|c|*7{>{\centering}X|}}")
    exo.append(r"\hline")
    exo.append(r"$x$ & %s \tabularnewline \hline" %
               " & ".join(["$%s$" % c[0] for c in val_exo2]))
    exo.append(r"$h\,(x)$ & %s \tabularnewline \hline" %
               " & ".join(["$%s$" % c[1] for c in val_exo2]))
    exo.append(r"\end{tabularx} \medskip")
    exo.append(r"\begin{enumerate}")
    cor.append(
        u"\\item Voici un tableau de valeurs correspondant à une fonction $h$.\\par"
    )
    cor.append(r"\renewcommand{\arraystretch}{1.5}")
    cor.append(r"\begin{tabularx}{\linewidth}[t]{|c|*7{>{\centering}X|}}")
    cor.append(r"\hline")
    cor.append(r"$x$ & %s \tabularnewline \hline" %
               " & ".join(["$%s$" % c[0] for c in val_exo2]))
    cor.append(r"$h\,(x)$ & %s \tabularnewline \hline" %
               " & ".join(["$%s$" % c[1] for c in val_exo2]))
    cor.append(r"\end{tabularx} \medskip")
    cor.append(r"\begin{enumerate}")
    lpos21 = [i for i in range(7)]
    for dummy in range(3):
        del lpos21[randrange(len(lpos21))]
    shuffle(lpos21)
    lquest = [
        u"Quelle est l'image de $%s$ par la fonction $h$ ?" %
        val_exo2[lpos21[0]][0],
        u"Quel est l'antécédent de $%s$ par la fonction $h$ ?" %
        val_exo2[lpos21[1]][1],
        u"Compléter : $h\\,(%s)=\\ldots\\ldots$" % val_exo2[lpos21[2]][0],
        u"Compléter : $h\\,(\\ldots\\ldots)=%s$" % val_exo2[lpos21[3]][1]
    ]
    lpos22 = [0, 1, 2, 3]
    shuffle(lpos22)
    for i in range(4):
        exo.append(u"\\item %s" % lquest[lpos22[i]])
        if lpos22[i] == 0:
            cor.append(
                u"\\item L'image de $%s$ par la fonction $h$ est $\\mathbf{%s}$."
                % (val_exo2[lpos21[0]][0], val_exo2[lpos21[0]][1]))
        elif lpos22[i] == 1:
            cor.append(
                u"\\item Un antécédent de $%s$ par la fonction $h$ est $\\mathbf{%s}$."
                % (val_exo2[lpos21[1]][1], val_exo2[lpos21[1]][0]))
        if lpos22[i] == 2:
            cor.append(u"\\item $h\\,(%s)=\\mathbf{%s}$." %
                       (val_exo2[lpos21[2]][0], val_exo2[lpos21[2]][1]))
        elif lpos22[i] == 1:
            cor.append(u"\\item $h\\,(\\mathbf{%s})=%s$." %
                       (val_exo2[lpos21[3]][0], val_exo2[lpos21[3]][1]))

    exo.extend([r"\end{enumerate}", r"\columnbreak"])
    cor.append(r"\end{enumerate}")
    val_exo3 = choix_points()
    p = Priorites3.plotify(Priorites3.priorites(Lagrange(val_exo3))[-1])
    exo.extend([
        u"\\item Le graphique ci-dessous représente une fonction $k$ : \\par",
        r"\begin{center}", r"\psset{unit=8mm, algebraic, dotsize=4pt 4}",
        r"\begin{pspicture*}(-4.2,-4.2)(4.2,4.2)"
    ])
    exo.append(
        r"\psgrid[subgriddiv=2, gridwidth=.6pt,subgridcolor=lightgray, gridlabels=0pt]"
    )
    exo.append(r"\psaxes[linewidth=1.2pt,]{->}(0,0)(-4.2,-4.2)(4.2,4.2)")
    exo.append(
        r"\psplot[plotpoints=200, linewidth=1.5pt, linecolor=DarkRed]{-4.2}{4.2}{%s}"
        % p)
    exo.append(r"\psdots %s" % " ".join([str(val) for val in val_exo3]))
    exo.extend([r"\end{pspicture*}", r"\end{center}", r"\begin{enumerate}"])
    cor.extend([
        u"\\item Le graphique ci-après représente une fonction $k$ : \\par",
        r"\begin{center}", r"\psset{unit=8mm, algebraic, dotsize=4pt 4}",
        r"\begin{pspicture*}(-4.2,-4.2)(4.2,4.2)"
    ])
    cor.append(
        r"\psgrid[subgriddiv=2, gridwidth=.6pt,subgridcolor=lightgray, gridlabels=0pt]"
    )
    cor.append(r"\psaxes[linewidth=1.2pt,]{->}(0,0)(-4.2,-4.2)(4.2,4.2)")
    cor.append(
        r"\psplot[plotpoints=200, linewidth=1.5pt, linecolor=DarkRed]{-4.2}{4.2}{%s}"
        % p)
    cor.append(r"\psdots %s" % " ".join([str(val) for val in val_exo3]))
    lpos31 = [i for i in range(5)]
    for dummy in range(1):
        del lpos31[randrange(len(lpos31))]
    for i in range(4):
        cor.append(
            r"\psline[linestyle=dashed, linecolor=DarkRed](0, %s)(%s, %s)(%s, 0)"
            % (val_exo3[lpos31[i]][1], val_exo3[lpos31[i]][0],
               val_exo3[lpos31[i]][1], val_exo3[lpos31[i]][0]))
    cor.extend([r"\end{pspicture*}", r"\end{center}", r"\begin{enumerate}"])
    shuffle(lpos31)
    lquest = [
        u"Quelle est l'image de $%s$ par la fonction $k$ ?" %
        val_exo3[lpos31[0]][0],
        u"Donner un antécédent de %s par la fonction $k$." %
        val_exo3[lpos31[1]][1],
        u"Compléter : $k\\,(%s)=\\ldots\\ldots$" % val_exo3[lpos31[2]][0],
        u"Compléter : $k\\,(\\ldots\\ldots)=%s$" % val_exo3[lpos31[3]][1]
    ]
    lpos32 = [0, 1, 2, 3]
    shuffle(lpos32)
    for i in range(4):
        exo.append(u"\\item %s" % lquest[lpos32[i]])
        if lpos32[i] == 0:
            cor.append(
                u"\\item L'image de $%s$ par la fonction $k$ est $\\mathbf{%s}$."
                % (val_exo3[lpos31[0]][0], val_exo3[lpos31[0]][1]))
        elif lpos32[i] == 1:
            cor.append(
                u"\\item Un antécédent de $%s$ par la fonction $k$ est $\\mathbf{%s}$."
                % (val_exo3[lpos31[1]][1], val_exo3[lpos31[1]][0]))
        if lpos32[i] == 2:
            cor.append(u"\\item $k\\,(%s)=\\mathbf{%s}$." %
                       (val_exo3[lpos31[2]][0], val_exo3[lpos31[2]][1]))
        elif lpos32[i] == 3:
            cor.append(u"\\item $k\\,(\\mathbf{%s})=%s$." %
                       (val_exo3[lpos31[3]][0], val_exo3[lpos31[3]][1]))
    exo.append(r"\end{enumerate}")
    cor.append(r"\end{enumerate}")

    exo.append(r"\end{enumerate}")
    exo.append(r"\end{multicols}")
    cor.append(r"\end{enumerate}")
    cor.append(r"\end{multicols}")

    return exo, cor
Example #16
0
def notion_fonction():
    """Créé un exercice bilan sur la notion de fonction"""
    from pyromaths.classes.PolynomesCollege import Polynome
    from pyromaths.outils import Priorites3
    fct = [eval(creer_fonction(1)), eval(creer_fonction(2))]
    ant = [randrange(1, 6) * (-1) ** fct[0].degre(), randrange(1, 6) * (-1) ** fct[1].degre(), randrange(1, 6) * (-1) ** fct[1].degre(), randrange(1, 6) * (-1) ** fct[0].degre()]
    shuffle(fct)
    val_exo2 = choix_points(nb=7)
    exo = [r"\exercice", r"\begin{multicols}{2}", r"\begin{enumerate}", u"\\item On donne"]
    exo.append(r"$\begin{array}[t]{l}")
    exo.append(u"f:~x \\longmapsto %s \\\\ g:~x \\longmapsto %s" % (fct[0], fct[1]))
    exo.extend([r"\end{array}$", r"\begin{enumerate}", ])
    exo.append(u"\\item Quelle est l'image de $%s$ par la fonction $f$ ?" % ant[0])
    cor = [r"\exercice", r"\begin{multicols}{2}", r"\begin{enumerate}", u"\\item On donne"]
    cor.append(r"$\begin{array}[t]{l}")
    cor.append(u"f:~x \\longmapsto %s \\\\ g:~x \\longmapsto %s" % (fct[0], fct[1]))
    cor.extend([r"\end{array}$", r"\begin{enumerate}", ])
    cor.append(u"\\item Quelle est l'image de $%s$ par la fonction $f$ ?" % ant[0])
    cor.extend(corrige('f', fct[0], ant[0]))
    exo.append(u"\\item Quelle est l'image de $%s$ par la fonction $g$ ?" % ant[1])
    cor.append(u"\\item Quelle est l'image de $%s$ par la fonction $g$ ?" % ant[1])
    cor.extend(corrige('g', fct[1], ant[1]))
    exo.append(u"\\item Calculer $f\\,(%s)$." % ant[2])
    cor.append(u"\\item Calculer $f\\,(%s)$." % ant[2])
    cor.extend(corrige('f', fct[0], ant[2]))
    exo.append(u"\\item Calculer $g\\,(%s)$." % ant[3])
    cor.append(u"\\item Calculer $g\\,(%s)$." % ant[3])
    cor.extend(corrige('g', fct[1], ant[3]))
    exo.append(r"\end{enumerate}")
    cor.append(r"\end{enumerate}")
    exo.append(u"\\item Voici un tableau de valeurs correspondant à une fonction $h$.\\par")
    exo.append(r"\renewcommand{\arraystretch}{1.5}")
    exo.append(r"\begin{tabularx}{\linewidth}[t]{|c|*7{>{\centering}X|}}")
    exo.append(r"\hline")
    exo.append(r"$x$ & %s \tabularnewline \hline" % " & ".join(["$%s$" % c[0] for c in val_exo2]))
    exo.append(r"$h\,(x)$ & %s \tabularnewline \hline" % " & ".join(["$%s$" % c[1] for c in val_exo2]))
    exo.append(r"\end{tabularx} \medskip")
    exo.append(r"\begin{enumerate}")
    cor.append(u"\\item Voici un tableau de valeurs correspondant à une fonction $h$.\\par")
    cor.append(r"\renewcommand{\arraystretch}{1.5}")
    cor.append(r"\begin{tabularx}{\linewidth}[t]{|c|*7{>{\centering}X|}}")
    cor.append(r"\hline")
    cor.append(r"$x$ & %s \tabularnewline \hline" % " & ".join(["$%s$" % c[0] for c in val_exo2]))
    cor.append(r"$h\,(x)$ & %s \tabularnewline \hline" % " & ".join(["$%s$" % c[1] for c in val_exo2]))
    cor.append(r"\end{tabularx} \medskip")
    cor.append(r"\begin{enumerate}")
    lpos21 = [i for i in range(7)]
    for dummy in range(3):
        del lpos21[randrange(len(lpos21))]
    shuffle(lpos21)
    lquest = [u"Quelle est l'image de $%s$ par la fonction $h$ ?" % val_exo2[lpos21[0]][0],
              u"Quel est l'antécédent de $%s$ par la fonction $h$ ?" % val_exo2[lpos21[1]][1],
              u"Compléter : $h\\,(%s)=\\ldots\\ldots$" % val_exo2[lpos21[2]][0],
              u"Compléter : $h\\,(\\ldots\\ldots)=%s$" % val_exo2[lpos21[3]][1]]
    lpos22 = [0, 1, 2, 3]
    shuffle(lpos22)
    for i in range(4):
        exo.append(u"\\item %s" % lquest[lpos22[i]])
        if lpos22[i] == 0:
            cor.append(u"\\item L'image de $%s$ par la fonction $h$ est $\\mathbf{%s}$." % (val_exo2[lpos21[0]][0], val_exo2[lpos21[0]][1]))
        elif lpos22[i] == 1:
            cor.append(u"\\item Un antécédent de $%s$ par la fonction $h$ est $\\mathbf{%s}$." % (val_exo2[lpos21[1]][1], val_exo2[lpos21[1]][0]))
        if lpos22[i] == 2:
            cor.append(u"\\item $h\\,(%s)=\\mathbf{%s}$." % (val_exo2[lpos21[2]][0], val_exo2[lpos21[2]][1]))
        elif lpos22[i] == 1:
            cor.append(u"\\item $h\\,(\\mathbf{%s})=%s$." % (val_exo2[lpos21[3]][0], val_exo2[lpos21[3]][1]))

    exo.extend([r"\end{enumerate}", r"\columnbreak"])
    cor.append(r"\end{enumerate}")
    val_exo3 = choix_points()
    p = Priorites3.plotify(Priorites3.priorites(Lagrange(val_exo3))[-1])
    exo.extend([u"\\item Le graphique ci-dessous représente une fonction $k$ : \\par", r"\begin{center}",
                r"\psset{unit=8mm, algebraic, dotsize=4pt 4}", r"\begin{pspicture*}(-4.2,-4.2)(4.2,4.2)"])
    exo.append(r"\psgrid[subgriddiv=2, gridwidth=.6pt,subgridcolor=lightgray, gridlabels=0pt]")
    exo.append(r"\psaxes[linewidth=1.2pt,]{->}(0,0)(-4.2,-4.2)(4.2,4.2)")
    exo.append(r"\psplot[plotpoints=200, linewidth=1.5pt, linecolor=DarkRed]{-4.2}{4.2}{%s}" % p)
    exo.append(r"\psdots %s" % " ".join([str(val) for val in val_exo3]))
    exo.extend([r"\end{pspicture*}", r"\end{center}", r"\begin{enumerate}"])
    cor.extend([u"\\item Le graphique ci-après représente une fonction $k$ : \\par", r"\begin{center}",
                r"\psset{unit=8mm, algebraic, dotsize=4pt 4}", r"\begin{pspicture*}(-4.2,-4.2)(4.2,4.2)"])
    cor.append(r"\psgrid[subgriddiv=2, gridwidth=.6pt,subgridcolor=lightgray, gridlabels=0pt]")
    cor.append(r"\psaxes[linewidth=1.2pt,]{->}(0,0)(-4.2,-4.2)(4.2,4.2)")
    cor.append(r"\psplot[plotpoints=200, linewidth=1.5pt, linecolor=DarkRed]{-4.2}{4.2}{%s}" % p)
    cor.append(r"\psdots %s" % " ".join([str(val) for val in val_exo3]))
    lpos31 = [i for i in range(5)]
    for dummy in range(1):
        del lpos31[randrange(len(lpos31))]
    for i in range(4):
        cor.append(r"\psline[linestyle=dashed, linecolor=DarkRed](0, %s)(%s, %s)(%s, 0)" % (val_exo3[lpos31[i]][1], val_exo3[lpos31[i]][0], val_exo3[lpos31[i]][1], val_exo3[lpos31[i]][0]))
    cor.extend([r"\end{pspicture*}", r"\end{center}", r"\begin{enumerate}"])
    shuffle(lpos31)
    lquest = [u"Quelle est l'image de $%s$ par la fonction $k$ ?" % val_exo3[lpos31[0]][0],
              u"Donner un antécédent de %s par la fonction $k$." % val_exo3[lpos31[1]][1],
              u"Compléter : $k\\,(%s)=\\ldots\\ldots$" % val_exo3[lpos31[2]][0],
              u"Compléter : $k\\,(\\ldots\\ldots)=%s$" % val_exo3[lpos31[3]][1]]
    lpos32 = [0, 1, 2, 3]
    shuffle(lpos32)
    for i in range(4):
        exo.append(u"\\item %s" % lquest[lpos32[i]])
        if lpos32[i] == 0:
            cor.append(u"\\item L'image de $%s$ par la fonction $k$ est $\\mathbf{%s}$." % (val_exo3[lpos31[0]][0], val_exo3[lpos31[0]][1]))
        elif lpos32[i] == 1:
            cor.append(u"\\item Un antécédent de $%s$ par la fonction $k$ est $\\mathbf{%s}$." % (val_exo3[lpos31[1]][1], val_exo3[lpos31[1]][0]))
        if lpos32[i] == 2:
            cor.append(u"\\item $k\\,(%s)=\\mathbf{%s}$." % (val_exo3[lpos31[2]][0], val_exo3[lpos31[2]][1]))
        elif lpos32[i] == 1:
            cor.append(u"\\item $k\\,(\\mathbf{%s})=%s$." % (val_exo3[lpos31[3]][0], val_exo3[lpos31[3]][1]))
    exo.append(r"\end{enumerate}")
    cor.append(r"\end{enumerate}")



    exo.append(r"\end{enumerate}")
    exo.append(r"\end{multicols}")
    cor.append(r"\end{enumerate}")
    cor.append(r"\end{multicols}")

    return exo, cor
Example #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] + ' \\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