Beispiel #1
0
def produits_fractions():
    exo = [
        "\\exercice",
        _(u"Calculer en détaillant les étapes. Donner le résultat sous la forme d’une fraction la plus simple possible (ou d’un entier lorsque c’est possible)."
          ), "\\begin{multicols}{4}", "  \\begin{enumerate}"
    ]
    cor = [
        "\\exercice*",
        _(u"Calculer en détaillant les étapes. Donner le résultat sous la forme d’une fraction la plus simple possible (ou d’un entier lorsque c’est possible)."
          ), "\\begin{multicols}{4}", "  \\begin{enumerate}"
    ]
    lexo = valeurs_produit()
    for question in lexo:
        solve = [question]
        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        solve = priorites(question)
        solve = texify(solve)
        for e in solve:
            cor.append("\\[\\thenocalcul = " + e + "\\]")
        exo.append("\\stepcounter{nocalcul}")
        cor.append("\\stepcounter{nocalcul}")
    exo.extend(["  \\end{enumerate}", "\\end{multicols}"])
    cor.extend(["  \\end{enumerate}", "\\end{multicols}"])

    return (exo, cor)
Beispiel #2
0
def reduire():
    """Travail sur les bases du calcul littéral en quatrième"""
    exo = [
        "\\exercice", u"Réduire, si possible, les expressions suivantes :",
        "\\begin{multicols}{3}\\noindent", "  \\begin{enumerate}"
    ]
    cor = [
        "\\exercice*", u"Réduire, si possible, les expressions suivantes :",
        "\\begin{multicols}{3}\\noindent", "  \\begin{enumerate}"
    ]
    for dummy in range(9):
        a = valeurs_reduire()
        solve = [a]
        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        solve = priorites(a)
        solve.insert(0, a)
        solve = texify(solve)
        if len(solve) > 1:
            for e in solve[1:]:
                cor.append("\\[\\thenocalcul = " + e + "\\]")
        exo.append("\\stepcounter{nocalcul}")
        cor.append("\\stepcounter{nocalcul}")
    exo.extend(["  \\end{enumerate}", "\\end{multicols}"])
    cor.extend(["  \\end{enumerate}", "\\end{multicols}"])
    return (exo, cor)
Beispiel #3
0
def double_distributivite():
    """Crée un exercice permettant de s'entrainer sur la double distributivité
    """
    lcalc, expr = [], []
    for i in range(2):
        tmp = [
            'Polynome([[%s, 1]], details=3)' % ([1, randrange(2, 10)][i]),
            'Polynome([[%s, 1]], details=3)' % randrange(2, 10)
        ]
        shuffle(tmp)
        lcalc.append(["*".join(tmp)])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    tmp = [0, 1, 2]
    for i in range(2, 5):
        a = valeurs_reduire_somme(2)
        b = valeurs_reduire_somme(2)
        exp = tmp.pop(randrange(len(tmp)))
        if exp != 1:
            c = 'Polynome([[%s, %s]], details=3)' % (randrange(1, 11) *
                                                     (-1)**randrange(3), exp)
        else:
            c = valeurs_reduire_somme(2)
        lpoly = [a, b]
        if randrange(2): lpoly.insert(0, c)
        else: lpoly.append(c)
        if c == lpoly[0]:
            lcalc.append(['%s+%s*%s' % (lpoly[0], lpoly[1], lpoly[2])])
        else:
            lcalc.append(['%s*%s+%s' % (lpoly[0], lpoly[1], lpoly[2])])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    exo = [
        "\\exercice",
        u"Développer et réduire chacune des expressions littérales suivantes :"
    ]
    exo.append("\\begin{multicols}{2}")
    cor = [
        "\\exercice*",
        u"Développer et réduire chacune des expressions littérales suivantes :"
    ]
    cor.append("\\begin{multicols}{2}")
    for i in range(len(lcalc)):
        if i == 2: cor.append("\\end{multicols}")
        cor.append('\\\\\n'.join([
            '$%s=%s$' % (chr(i + 65), expr[i][j])
            for j in range(len(expr[i]) - 1)
        ]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    exo.append('\\\\\n'.join(
        ['$%s=%s$' % (chr(i + 65), expr[i][0]) for i in range(len(expr))]))
    exo.append("\\end{multicols}")
    return exo, cor
Beispiel #4
0
def distributivite():
    """Crée un exercice permettant de s'entrainer sur la distributivité
    """
    lcalc, expr = [], []
    for i in range(2):
        tmp = ['Polynome([[%s, 1]], details=3)' % randrange(2, 10), 'Polynome([[%s, 0]], details=3)' % randrange(2, 10)]
        shuffle(tmp)
        lcalc.append(["*".join(tmp)])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    tmp = [0, 1, 2]
    for i in range(2, 5):
        k = 'Polynome([[%s, 0]], details=3)' % randrange(2, 11)
        if i > 1:
            a = valeurs_reduire_somme(2)
        else:
            sgn = (-1) ** randrange(2)
            a = [[sgn, 1] for dummy2 in range(randrange(2, 5))]
            a.append([randrange(1, 11) * (-1) ** randrange(2), 0])
            a = 'Polynome(%s, var=\'x\', details=3)' % a
        exp = tmp.pop(randrange(len(tmp)))
        if exp != 2:
            b = 'Polynome([[%s, %s]], details=3)' % (randrange(1, 11) * (-1) ** randrange(3), exp)
        else:
            b = valeurs_reduire_somme(2)

        lpoly = [a, k]
        shuffle(lpoly)
        if randrange(2):lpoly.insert(0, b)
        else:lpoly.append(b)
        if b == lpoly[0]:
            lcalc.append(['%s+%s*%s' % (lpoly[0], lpoly[1], lpoly[2])])
        else:
            lcalc.append(['%s*%s+%s' % (lpoly[0], lpoly[1], lpoly[2])])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    exo = ["\\exercice", u"Développer et réduire chacune des expressions littérales suivantes :"]
    exo.append("\\begin{multicols}{2}")
    cor = ["\\exercice*", u"Développer et réduire chacune des expressions littérales suivantes :"]
    cor.append("\\begin{multicols}{2}")

    for i in range(len(lcalc)):
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][j]) for j in range(len(expr[i]) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    exo.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][0]) for i in range(len(expr))]))
    exo.append("\\end{multicols}")
    cor.append("\\end{multicols}")
    return exo, cor
Beispiel #5
0
def tex_equation2(valeurs):  # renvoie l'ecriture des quotients au meme denominateur
    texte = '\\cfrac{'
    texte += texify([['Polynome([[%s, 1], [%s, 0]])' % (valeurs[4][0], valeurs[4][1]), valeurs[3][0], 'Polynome([[%s, 1], [%s, 0]])' % (valeurs[4][2], valeurs[4][3])]])[0]
    texte = texte + '}{\\cancel{%s}}=\cfrac{' % (valeurs[1][0] * valeurs[2][0])
    texte += str(Polynome([[valeurs[4][4], 1] , [valeurs[4][5], 0]]))
    texte = texte + '}{\\cancel{%s}}' % (valeurs[1][0] * valeurs[2][0])
    return texte
Beispiel #6
0
def soustraction():
    """Réduction d'expressions du type 5a+3-(5+a)
    """
    lcalc, expr = [], []
    sgn = ['-', '-', '-', '-', '+', '+']
    for i in range(len(sgn)):
        a = valeurs_reduire_somme(2)
        b = 'Polynome([[%s,0]], var=\'x\', details=3)' % (randrange(2, 11) * (-1) ** randrange(2))
        c = 'Polynome([[%s,1]], var=\'x\', details=3)' % (randrange(2, 11) * (-1) ** randrange(2))
        poly = [a, b, c]
        shuffle(poly)
        signe = sgn.pop(randrange(len(sgn)))
        poly.insert(poly.index(a), signe)
        if signe == '+':
            poly.insert(poly.index(a), '(')
            poly.insert(poly.index(a) + 1, ')')
        poly.insert(poly.index(b), '+')
        poly.insert(poly.index(c), '+')
        if poly[0] == '+': del poly[0]
        lcalc.append(["".join(poly)])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    exo = ["\\exercice", u"Réduire chacune des expressions littérales suivantes :"]
    exo.append("\\begin{multicols}{2}")
    cor = ["\\exercice*", u"Réduire chacune des expressions littérales suivantes :"]
    cor.append("\\begin{multicols}{2}")
    for i in range(len(lcalc)):
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][j]) for j in range(len(expr[i]) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    exo.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][0]) for i in range(len(expr))]))
    exo.append("\\end{multicols}")
    cor.append("\\end{multicols}")
    return exo, cor
Beispiel #7
0
    def __str__(self):
        r"""**str**\ (*object*)

        Renvoie une version LaTeX de la :class:`Fraction`.
            >>> from pyromaths.classes.Fractions import Fraction
            >>> str(Fraction(8,1))
            '8'
            >>> str(Fraction(5,6))
            '\\dfrac{5}{6}'
            >>> str(Fraction('-5*2', '3*2', 'r'))
            '\\dfrac{-5_{\\times 2}}{3_{\\times 2}}'
            >>> str(Fraction('5*-7*2', '11*2*5', 's'))
            '\\dfrac{\\cancel{5}\\times \\left( -7\\right) \\times \\cancel{2}}{11\\times \\cancel{2}\\times \\cancel{5}}'
            >>> str(Fraction('-144', '22', 's'))
            '\\dfrac{-72\\times \\cancel{2}}{11\\times \\cancel{2}}'
            >>> from pyromaths.classes.SquareRoot import SquareRoot
            >>> str(Fraction(SquareRoot([[-10, None], [-1, 80]]), -2))
            '\\dfrac{-10-\\sqrt{80}}{-2}'
            >>> str(Fraction(SquareRoot([[-10, None], [-4, 5]]), -2, 's'))
            '\\dfrac{\\left( 5+2\\,\\sqrt{5}\\right) \\times \\cancel{-2}}{1\\times \\cancel{-2}}'
            
        :rtype: string
        """
        from pyromaths.outils.Priorites3 import splitting
        #=======================================================================
        # print (repr(self))
        #=======================================================================
        if self.n == 0 or self.n == '0':
            return '0'
        lnum, lden = [], []
        if isinstance(self.n, str): lnum = splitting(self.n)
        if isinstance(self.d, str): lden = splitting(self.d)
        if len(lnum) == 1: self.n, lnum = eval(self.n), []
        if len(lden) == 1: self.d, lden = eval(self.d), []
        if self.d == 1:
            return (str(self.n), texify([lnum])[0])[lnum != []]
        if self.code == "r":
            # lnum et lden doivent être définis et se terminer par [..., '*', valeur]
            if not lnum or not lden or lnum[-2:] != lden[-2:]:
                raise ValueError(u'Mauvais usage de l\'étiquettes "r" dans %r' % self)
            lden[-2], lden[-1], lnum[-2], lnum[-1] = [lden[-2], 'indice'], [lden[-1], 'indice'], [lnum[-2], 'indice'], [lnum[-1], 'indice']
            return '\\dfrac{%s}{%s}' % (texify([lnum])[0], texify([lden])[0])
        if self.code == "s":
            if isinstance(self.n, (int, float, SquareRoot)) and isinstance(self.d, (int, float, SquareRoot)):
                lepgcd = pgcd(self.n, self.d)
                lnum, lden = [repr(self.n // lepgcd), '*', [str(lepgcd), 'cancel']], [repr(self.d // lepgcd), '*', [str(lepgcd), 'cancel']]
            else:
                for i in range(len(lnum)):
                    if lnum[i] != '*' and lden.count(lnum[i]):
                        # On doit simplifier la fraction par ce nombre
                        j = lden.index(lnum[i])
                        lden[j] = [lden[j], 'cancel']
                        lnum[i] = [lnum[i], 'cancel']
            return '\\dfrac{%s}{%s}' % (texify([lnum])[0], texify([lden])[0])
        s = r'\dfrac'
        s += '{%s}' % (self.n, texify([lnum])[0])[lnum != []]
        s += '{%s}' % (self.d, texify([lden])[0])[lden != []]
        return s
Beispiel #8
0
def tex_equation2(
        valeurs):  # renvoie l'ecriture des quotients au meme denominateur
    texte = '\\cfrac{'
    texte += texify([[
        'Polynome([[%s, 1], [%s, 0]])' % (valeurs[4][0], valeurs[4][1]),
        valeurs[3][0],
        'Polynome([[%s, 1], [%s, 0]])' % (valeurs[4][2], valeurs[4][3])
    ]])[0]
    texte = texte + '}{\\cancel{%s}}=\cfrac{' % (valeurs[1][0] * valeurs[2][0])
    texte += str(Polynome([[valeurs[4][4], 1], [valeurs[4][5], 0]]))
    texte = texte + '}{\\cancel{%s}}' % (valeurs[1][0] * valeurs[2][0])
    return texte
Beispiel #9
0
def sommes_fractions():
    exo = [_("\\exercice"),
           _(u"Calculer en détaillant les étapes. Donner le résultat sous la forme d’une fraction la plus simple possible (ou d’un entier lorsque c’est possible)."),
           "\\begin{multicols}{4}", "  \\begin{enumerate}"]
    cor = [_("\\exercice*"),
           _(u"Calculer en détaillant les étapes. Donner le résultat sous la forme d’une fraction la plus simple possible (ou d’un entier lorsque c’est possible)."),
           "\\begin{multicols}{4}", "  \\begin{enumerate}"]
    lexo = valeurs_somme()
    for question in lexo:
        solve = [question]
        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        solve = priorites(question)
        solve = texify(solve)
        for e in solve:
            cor.append("\\[\\thenocalcul = " + e + "\\]")
        exo.append("\\stepcounter{nocalcul}")
        cor.append("\\stepcounter{nocalcul}")
    exo.extend(["  \\end{enumerate}", "\\end{multicols}"])
    cor.extend(["  \\end{enumerate}", "\\end{multicols}"])
    return (exo, cor)
Beispiel #10
0
def reduire():
    """Travail sur les bases du calcul littéral en quatrième"""
    exo = ["\\exercice", u"Réduire, si possible, les expressions suivantes :",
           "\\begin{multicols}{3}\\noindent", "  \\begin{enumerate}"]
    cor = ["\\exercice*", u"Réduire, si possible, les expressions suivantes :",
           "\\begin{multicols}{3}\\noindent", "  \\begin{enumerate}"]
    for dummy in range(9):
        a = valeurs_reduire()
        solve = [a]
        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
        solve = priorites(a)
        solve.insert(0, a)
        solve = texify(solve)
        if len(solve) > 1:
            for e in solve[1:]:
                cor.append("\\[\\thenocalcul = " + e + "\\]")
        exo.append("\\stepcounter{nocalcul}")
        cor.append("\\stepcounter{nocalcul}")
    exo.extend(["  \\end{enumerate}", "\\end{multicols}"])
    cor.extend(["  \\end{enumerate}", "\\end{multicols}"])
    return (exo, cor)
Beispiel #11
0
def soustraction():
    """Réduction d'expressions du type 5a+3-(5+a)
    """
    lcalc, expr = [], []
    sgn = ['-', '-', '-', '-', '+', '+']
    for i in range(len(sgn)):
        a = valeurs_reduire_somme(2)
        b = 'Polynome([[%s,0]], var=\'x\', details=3)' % (randrange(2, 11) *
                                                          (-1)**randrange(2))
        c = 'Polynome([[%s,1]], var=\'x\', details=3)' % (randrange(2, 11) *
                                                          (-1)**randrange(2))
        poly = [a, b, c]
        shuffle(poly)
        signe = sgn.pop(randrange(len(sgn)))
        poly.insert(poly.index(a), signe)
        if signe == '+':
            poly.insert(poly.index(a), '(')
            poly.insert(poly.index(a) + 1, ')')
        poly.insert(poly.index(b), '+')
        poly.insert(poly.index(c), '+')
        if poly[0] == '+': del poly[0]
        lcalc.append(["".join(poly)])
        lcalc[i].extend(priorites(lcalc[i][0]))
        lcalc[i][0] = splitting(lcalc[i][0])
        expr.append(texify(lcalc[i]))
    exo = [
        "\\exercice", u"Réduire chacune des expressions littérales suivantes :"
    ]
    exo.append("\\begin{multicols}{2}")
    cor = [
        "\\exercice*",
        u"Réduire chacune des expressions littérales suivantes :"
    ]
    cor.append("\\begin{multicols}{2}")
    for i in range(len(lcalc)):
        cor.append('\\\\\n'.join([
            '$%s=%s$' % (chr(i + 65), expr[i][j])
            for j in range(len(expr[i]) - 1)
        ]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    exo.append('\\\\\n'.join(
        ['$%s=%s$' % (chr(i + 65), expr[i][0]) for i in range(len(expr))]))
    exo.append("\\end{multicols}")
    cor.append("\\end{multicols}")
    return exo, cor
Beispiel #12
0
def exo_comptable():
    """Exercice tiré de l'excellent ouvrage Des maths ensemble et pour chacun quatrième
    """
    exo = ["\\exercice", u"Le principe est le suivant : l'extrémité de chaque flèche indique la somme de la ligne ou de la colonne correspondante. Compléter, sachant que $x$ représente un nombre quelconque et que le contenu des deux cases grises doit être le même.\\par"]
    cor = ["\\exercice*", u"Le principe est le suivant : l'extrémité de chaque flèche indique la somme de la ligne ou de la colonne correspondante. Compléter, sachant que $x$ représente un nombre quelconque et que le contenu des deux cases grises doit être le même.\\par"]
    lexo = [valeurs_reduire_somme(2) for dummy in range(8)]
    lcalc = [["%s+%s" % (lexo[4], lexo[0])], ["%s+%s" % (lexo[5], lexo[1])], ["%s+%s" % (lexo[6], lexo[2])], ["%s+%s" % (lexo[7], lexo[3])], \
             ["%s+%s+%s+%s" % tuple(lexo[0:4])], [ "%s+%s+%s+%s" % tuple(lexo[4:])]]
    for i in range(6):
        sol = priorites(lcalc[i][0])
        lcalc[i].extend(["".join(sol[j]) for j in range(len(sol))])
    lcalc.append(["%s+%s+%s+%s" % (lcalc[0][-1], lcalc[1][-1], lcalc[2][-1], lcalc[3][-1])])
    lcalc.append(["%s+%s" % (lcalc[4][-1], lcalc[5][-1])])
    for i in range(6, 8):
        sol = priorites(lcalc[i][0])
        lcalc[i].extend(["".join(sol[j]) for j in range(len(sol))])
    for i in range(8):
        for j in range(len(lcalc[i])):
            lcalc[i][j] = splitting(lcalc[i][j])
    expr = [texify(lcalc[i]) for i in range(8)]
    # expr = [texify([splitting(lexo[i])]) for i in range(8)]
    txt = []
    # txt.append(r"\psset{xunit=1.1cm,yunit=1.5cm}")
    txt.append(r"\begin{center}")
    txt.append(r"\begin{pspicture}(16,6)")
    txt.append(r"\psframe[fillstyle=solid,fillcolor=Gray](0,0)(2,1)")
    txt.append(r"\psframe[fillstyle=solid,fillcolor=Gray](14,5)(16,6)")
    txt.append(r"\psframe(14,2)(16,3)")
    txt.append(r"\psframe(14,3)(16,4)")
    txt.append(r"\multido{\i=4+2}{4}{")
    txt.append(r"\rput(\i,0){\psframe(0,0)(2,1)\psline[linewidth=2pt]{<-}(1,1.2)(1,1.8)}")
    txt.append(r"\rput(\i,2){\psframe(0,0)(2,1)}")
    txt.append(r"\rput(\i,3){\psframe(0,0)(2,1)}}")
    txt.append(r"\psline[linewidth=2pt]{<-}(2.2,.5)(3.8,.5)")
    txt.append(r"\psline[linewidth=2pt]{->}(12.2,2.5)(13.8,2.5)")
    txt.append(r"\psline[linewidth=2pt]{->}(12.2,3.5)(13.8,3.5)")
    txt.append(r"\psline[linewidth=2pt]{<-}(15,4.8)(15,4.2)")
    txt.append(r"\rput(5,2.5){$%s$}" % texify([splitting(lexo[0])])[0])
    txt.append(r"\rput(7,2.5){$%s$}" % texify([splitting(lexo[1])])[0])
    txt.append(r"\rput(9,2.5){$%s$}" % texify([splitting(lexo[2])])[0])
    txt.append(r"\rput(11,2.5){$%s$}" % texify([splitting(lexo[3])])[0])
    txt.append(r"\rput(5,3.5){$%s$}" % texify([splitting(lexo[4])])[0])
    txt.append(r"\rput(7,3.5){$%s$}" % texify([splitting(lexo[5])])[0])
    txt.append(r"\rput(9,3.5){$%s$}" % texify([splitting(lexo[6])])[0])
    txt.append(r"\rput(11,3.5){$%s$}" % texify([splitting(lexo[7])])[0])
    exo.extend(txt)
    txt.append(r"\rput(5,.5){$%s$}" % expr[0][-1])
    txt.append(r"\rput(7,.5){$%s$}" % expr[1][-1])
    txt.append(r"\rput(9,.5){$%s$}" % expr[2][-1])
    txt.append(r"\rput(11,.5){$%s$}" % expr[3][-1])
    txt.append(r"\rput(15,2.5){$%s$}" % expr[4][-1])
    txt.append(r"\rput(15,3.5){$%s$}" % expr[5][-1])
    txt.append(r"\rput(1,.5){$%s$}" % expr[6][-1])
    txt.append(r"\rput(15,5.5){$%s$}" % expr[7][-1])
    cor.extend(txt)
    exo.append("\\end{pspicture}\n\\end{center}")
    cor.append("\\end{pspicture}\n\\end{center}")
    cor.append(u"\\subsubsection*{Ligne du bas :}")
    cor.append(u"\\begin{multicols}{4}")
    for i in range(4):
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][j]) for j in range(len(expr[i]) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")
    cor.append(u"\\subsubsection*{Colonne de droite :}")
    cor.append(u"\\begin{multicols}{2}")
    for i in range(4, 6):
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][j]) for j in range(len(expr[i]) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")
    cor.append(u"\\subsubsection*{Cases grises :}")
    cor.append(u"\\begin{multicols}{2}")
    for i in range(6, 8):
        cor.append('\\\\\n'.join(['$%s=%s$' % (chr(i + 65), expr[i][j]) for j in range(len(expr[i]) - 1)]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")

    return exo, cor
Beispiel #13
0
def exo_comptable():
    """Exercice tiré de l'excellent ouvrage Des maths ensemble et pour chacun quatrième
    """
    exo = [
        "\\exercice",
        u"Le principe est le suivant : l'extrémité de chaque flèche indique la somme de la ligne ou de la colonne correspondante. Compléter, sachant que $x$ représente un nombre quelconque et que le contenu des deux cases grises doit être le même.\\par"
    ]
    cor = [
        "\\exercice*",
        u"Le principe est le suivant : l'extrémité de chaque flèche indique la somme de la ligne ou de la colonne correspondante. Compléter, sachant que $x$ représente un nombre quelconque et que le contenu des deux cases grises doit être le même.\\par"
    ]
    lexo = [valeurs_reduire_somme(2) for dummy in range(8)]
    lcalc = [["%s+%s" % (lexo[4], lexo[0])], ["%s+%s" % (lexo[5], lexo[1])], ["%s+%s" % (lexo[6], lexo[2])], ["%s+%s" % (lexo[7], lexo[3])], \
             ["%s+%s+%s+%s" % tuple(lexo[0:4])], [ "%s+%s+%s+%s" % tuple(lexo[4:])]]
    for i in range(6):
        sol = priorites(lcalc[i][0])
        lcalc[i].extend(["".join(sol[j]) for j in range(len(sol))])
    lcalc.append([
        "%s+%s+%s+%s" %
        (lcalc[0][-1], lcalc[1][-1], lcalc[2][-1], lcalc[3][-1])
    ])
    lcalc.append(["%s+%s" % (lcalc[4][-1], lcalc[5][-1])])
    for i in range(6, 8):
        sol = priorites(lcalc[i][0])
        lcalc[i].extend(["".join(sol[j]) for j in range(len(sol))])
    for i in range(8):
        for j in range(len(lcalc[i])):
            lcalc[i][j] = splitting(lcalc[i][j])
    expr = [texify(lcalc[i]) for i in range(8)]
    # expr = [texify([splitting(lexo[i])]) for i in range(8)]
    txt = []
    # txt.append(r"\psset{xunit=1.1cm,yunit=1.5cm}")
    txt.append(r"\begin{center}")
    txt.append(r"\begin{pspicture}(16,6)")
    txt.append(r"\psframe[fillstyle=solid,fillcolor=Gray](0,0)(2,1)")
    txt.append(r"\psframe[fillstyle=solid,fillcolor=Gray](14,5)(16,6)")
    txt.append(r"\psframe(14,2)(16,3)")
    txt.append(r"\psframe(14,3)(16,4)")
    txt.append(r"\multido{\i=4+2}{4}{")
    txt.append(
        r"\rput(\i,0){\psframe(0,0)(2,1)\psline[linewidth=2pt]{<-}(1,1.2)(1,1.8)}"
    )
    txt.append(r"\rput(\i,2){\psframe(0,0)(2,1)}")
    txt.append(r"\rput(\i,3){\psframe(0,0)(2,1)}}")
    txt.append(r"\psline[linewidth=2pt]{<-}(2.2,.5)(3.8,.5)")
    txt.append(r"\psline[linewidth=2pt]{->}(12.2,2.5)(13.8,2.5)")
    txt.append(r"\psline[linewidth=2pt]{->}(12.2,3.5)(13.8,3.5)")
    txt.append(r"\psline[linewidth=2pt]{<-}(15,4.8)(15,4.2)")
    txt.append(r"\rput(5,2.5){$%s$}" % texify([splitting(lexo[0])])[0])
    txt.append(r"\rput(7,2.5){$%s$}" % texify([splitting(lexo[1])])[0])
    txt.append(r"\rput(9,2.5){$%s$}" % texify([splitting(lexo[2])])[0])
    txt.append(r"\rput(11,2.5){$%s$}" % texify([splitting(lexo[3])])[0])
    txt.append(r"\rput(5,3.5){$%s$}" % texify([splitting(lexo[4])])[0])
    txt.append(r"\rput(7,3.5){$%s$}" % texify([splitting(lexo[5])])[0])
    txt.append(r"\rput(9,3.5){$%s$}" % texify([splitting(lexo[6])])[0])
    txt.append(r"\rput(11,3.5){$%s$}" % texify([splitting(lexo[7])])[0])
    exo.extend(txt)
    txt.append(r"\rput(5,.5){$%s$}" % expr[0][-1])
    txt.append(r"\rput(7,.5){$%s$}" % expr[1][-1])
    txt.append(r"\rput(9,.5){$%s$}" % expr[2][-1])
    txt.append(r"\rput(11,.5){$%s$}" % expr[3][-1])
    txt.append(r"\rput(15,2.5){$%s$}" % expr[4][-1])
    txt.append(r"\rput(15,3.5){$%s$}" % expr[5][-1])
    txt.append(r"\rput(1,.5){$%s$}" % expr[6][-1])
    txt.append(r"\rput(15,5.5){$%s$}" % expr[7][-1])
    cor.extend(txt)
    exo.append("\\end{pspicture}\n\\end{center}")
    cor.append("\\end{pspicture}\n\\end{center}")
    cor.append(u"\\subsubsection*{Ligne du bas :}")
    cor.append(u"\\begin{multicols}{4}")
    for i in range(4):
        cor.append('\\\\\n'.join([
            '$%s=%s$' % (chr(i + 65), expr[i][j])
            for j in range(len(expr[i]) - 1)
        ]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")
    cor.append(u"\\subsubsection*{Colonne de droite :}")
    cor.append(u"\\begin{multicols}{2}")
    for i in range(4, 6):
        cor.append('\\\\\n'.join([
            '$%s=%s$' % (chr(i + 65), expr[i][j])
            for j in range(len(expr[i]) - 1)
        ]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")
    cor.append(u"\\subsubsection*{Cases grises :}")
    cor.append(u"\\begin{multicols}{2}")
    for i in range(6, 8):
        cor.append('\\\\\n'.join([
            '$%s=%s$' % (chr(i + 65), expr[i][j])
            for j in range(len(expr[i]) - 1)
        ]))
        cor.append('\\\\')
        cor.append('\\fbox{$%s=%s$}\\\\\n' % (chr(i + 65), expr[i][-1]))
    cor.append(u"\\end{multicols}")

    return exo, cor
Beispiel #14
0
    def __str__(self):
        r"""**str**\ (*object*)

        Renvoie une version LaTeX de la :class:`Fraction`.
            >>> from pyromaths.classes.Fractions import Fraction
            >>> str(Fraction(8,1))
            8
            >>> str(Fraction(5,6))
            \dfrac{5}{6}
            >>> str(Fraction('-5*2', '3*2', 'r'))
            \dfrac{-5_{\times 2}}{3_{\times 2}}
            >>> str(Fraction('5*-7*2', '11*2*5', 's'))
            \dfrac{\cancel{5}\times \left( -7\right) \times \cancel{2}}{11\times \cancel{2}\times \cancel{5}}
            >>> str(Fraction('-144', '22', 's'))
            \dfrac{-72\times \cancel{2}}{11\times \cancel{2}}
            >>> from pyromaths.classes.SquareRoot import SquareRoot
            >>> str(Fraction(SquareRoot([[-10, None], [-1, 80]]), -2))
            \dfrac{-10-\sqrt{80}}{-2}
            >>> str(Fraction(SquareRoot([[-10, None], [-4, 5]]), -2, 's'))
            \dfrac{\left( 5+2\,\sqrt{5}\right) \times \cancel{-2}}{1\times \cancel{-2}}

        :rtype: string
        """
        from pyromaths.outils.Priorites3 import splitting
        #=======================================================================
        # print (repr(self))
        #=======================================================================
        if self.n == 0 or self.n == '0':
            return '0'
        lnum, lden = [], []
        if isinstance(self.n, str): lnum = splitting(self.n)
        if isinstance(self.d, str): lden = splitting(self.d)
        if len(lnum) == 1: self.n, lnum = eval(self.n), []
        if len(lden) == 1: self.d, lden = eval(self.d), []
        if self.d == 1:
            return (str(self.n), texify([lnum])[0])[lnum != []]
        if self.code == "r":
            # lnum et lden doivent être définis et se terminer par [..., '*', valeur]
            if not lnum or not lden or lnum[-2:] != lden[-2:]:
                raise ValueError(
                    u'Mauvais usage de l\'étiquettes "r" dans %r' % self)
            lden[-2], lden[-1], lnum[-2], lnum[-1] = [lden[-2], 'indice'], [
                lden[-1], 'indice'
            ], [lnum[-2], 'indice'], [lnum[-1], 'indice']
            return '\\dfrac{%s}{%s}' % (texify([lnum])[0], texify([lden])[0])
        if self.code == "s":
            if isinstance(self.n, (int, float, SquareRoot)) and isinstance(
                    self.d, (int, float, SquareRoot)):
                lepgcd = pgcd(self.n, self.d)
                lnum, lden = [
                    repr(self.n // lepgcd), '*', [str(lepgcd), 'cancel']
                ], [repr(self.d // lepgcd), '*', [str(lepgcd), 'cancel']]
            else:
                for i in range(len(lnum)):
                    if lnum[i] != '*' and lden.count(lnum[i]):
                        # On doit simplifier la fraction par ce nombre
                        j = lden.index(lnum[i])
                        lden[j] = [lden[j], 'cancel']
                        lnum[i] = [lnum[i], 'cancel']
            return '\\dfrac{%s}{%s}' % (texify([lnum])[0], texify([lden])[0])
        s = r'\dfrac'
        s += '{%s}' % (self.n, texify([lnum])[0])[lnum != []]
        s += '{%s}' % (self.d, texify([lden])[0])[lden != []]
        return s