def PythagoreSchema(parametre):
    ## ---Initialisation---
    question = u"Calculer la mesure du 3\\up{eme} côté :"
    exo = [ ]
    cor = [ ]
    ## ---Calcul des paramètres---
    #nom
    nom_sommet = choix_points(3)
    #mesure
    couples_pythagore = trouve_couples_pythagore(parametre[0])
    choix = random.randrange(3)
    mesure_temp = couples_pythagore[random.randrange(len(couples_pythagore))]
    mesure_sujet = []
    mesure_corrige = []
    for i in range(len(mesure_temp)):
        if i == choix:
            mesure_sujet.append("\\unit{\\ldots}{cm}")
            mesure_corrige.append("\\boxed{\\unit{%s}{cm}}" %mesure_temp[i])
        else:
            mesure_sujet.append("\\unit{%s}{cm}" %mesure_temp[i])
            mesure_corrige.append("\\unit{%s}{cm}" %mesure_temp[i])
    ## ---Redaction---
    tex_figure(exo,nom_sommet,mesure_sujet)
    tex_figure(cor,nom_sommet,mesure_corrige)
    return (exo, cor, question)
def exo_trigo(parametre):
    question = ""
    exo = []
    cor = []
    s = choix_points(6)
    n1 = cotes_sommets(s[0:3])
    n2 = cotes_sommets(s[3:6])
    v = valeurs_trigo()
    (l1, l2) = enonce_trigo(((s[0:3], n1, v[0]), (s[3:6], n2, v[1])))
    exo.extend(l1)
    cor.extend(l2)
    return (exo, cor, question)
def Nommer(parametre):
    ## ---Initialisation---
    question = u"Donner l'écriture de l'objet rouge :"
    exo = []
    cor = []
    ## ---Calcul des paramètres---
    nom_point = choix_points(5)
    coordonnee_point = coordonnees_points()
    (duo_point,nom_duo_point,nature_duo_point) = carateristique_duo_point(nom_point[0:4])
    choix_duo_point = random.randrange(len(duo_point))
    ## ---Redaction---
    tex_figure(exo,nom_point,coordonnee_point,duo_point,nature_duo_point,choix_duo_point)
    tex_figure(cor,nom_point,coordonnee_point,duo_point,nature_duo_point,choix_duo_point)
    cor.append("\\begin{center}")
    cor.append(u"L'objet rouge s'écrit \\fbox{%s}" % nom_duo_point[choix_duo_point])
    cor.append("\\end{center}")
    return (exo, cor, question)
def exo_thales(parametre):
    question = ""
    exo = []
    cor = []
    noms = choix_points(5)  # les noms des sommets
    while True:
        valeurs = valeurs_thales(70)  # les longueurs en mm
        if valeurs:
            break
    exo.append(tex_fig_thales(noms, valeurs))
    exo.append(tex_enonce_thales(noms, valeurs))
    cor.append(tex_fig_thales(noms, valeurs))
    cor.append(tex_enonce_thales(noms, valeurs))
    cor.append(tex_resolution_thales0(noms, valeurs))
    cor.append(tex_resolution_thales1(noms, valeurs))
    cor.append(tex_resolution_thales2(noms, valeurs))
    cor.append(tex_resolution_thales3(noms, valeurs))
    return (exo, cor, question)
def exo_reciproque_pythagore(parametre):
    question = ""
    exo = []
    cor = []
    while True:
        longueurs = couples_pythagore[random.randrange(len(couples_pythagore))]
        longueurs = [longueurs[i] / 10.0 for i in range(3)]
        if inegalite_triangulaire(longueurs):
            break
    noms = choix_points(3)
    nom_tr = nom_triangle(noms)
    l = [i for i in range(3)]
    n = [l.pop(random.randrange(3 - i)) for i in range(3)]
    c = cotes_sommets(noms)
    recip = (nom_tr, c[n[0]], nombre(longueurs[n[0]]), c[n[1]], nombre(longueurs[n[1]]),
             c[n[2]], nombre(longueurs[n[2]]), nom_tr)
    enonce = \
        """Soit $%s$ un triangle tel que : $\\quad %s=\\unit[%s]{cm}\\quad$, $\\quad %s=\\unit[%s]{cm}\\quad$ et $\\quad %s=\\unit[%s]{cm}$.\\par
Quelle est la nature du triangle $%s$?
""" % \
        recip
    exo.append(enonce)
    cor.append(enonce)
    cor.append("\\par\\dotfill{}\\\\\n")
    cor.append(u"Le triangle %s n'est ni isocèle, ni équilatéral.\\par\n" %
               nom_tr)
    cor.append("$\\left.")
    cor.append("\\renewcommand{\\arraystretch}{2}")
    cor.append("\\begin{array}{l}")

    cor.append(u"\\bullet %s^2=%s^2=%s\\qquad\\text{(}[%s]\\text{ est le plus grand côté.)}\\\\\n" %
               (c[2], nombre(longueurs[2]), nombre(longueurs[2] ** 2), c[2]))
    cor.append("\\bullet  %s^2+%s^2=%s^2+%s^2=%s \n" % (c[0], c[1],
               nombre(longueurs[0]), nombre(longueurs[1]), nombre(longueurs[0] **
               2 + longueurs[1] ** 2)))
    cor.append("\\end{array}")
    cor.append("\\right\\rbrace$")
    cor.append(u"""Donc $%s^2=%s^2+%s^2$.\\par
D'après la \\textbf{réciproque du théorème de Pythagore},
\\fbox{le triangle $%s$ est rectangle en $%s$.}""" %
               (c[2], c[0], c[1], nom_tr, noms[2]))
    return (exo, cor, question)
def Appartient(parametre):
    ## ---Initialisation---
    question = u"Compléter en utilisant $\\in$ ou $\\notin$ :"
    exo = []
    cor = []
    ## ---Calcul des paramètres---
    nom_point = choix_points(5)
    coordonnee_point = coordonnees_points()
    #liste des combinaisons de 2 points
    duo_point = liste_combinaison(nom_point[0:4],2)
    #nature et noms des combinaisons de 2 points
    nom_duo_point = []
    nature_duo_point = []
    for i in range(len(duo_point)):
        nom_duo_point.append("(%s%s)" %(duo_point[i][0],duo_point[i][1]))
        nature_duo_point.append("une droite")
    choix_duo_point = len(duo_point)+1
    #
    diagonale = [[nom_point[0],nom_point[2]],[nom_point[1],nom_point[3]]]
    choix_diagonale = random.randrange(2)
    choix_type = random.randrange(5)
    ## ---Redaction---
    tex_figure(exo,nom_point,coordonnee_point,duo_point,nature_duo_point,choix_duo_point)
    tex_figure(cor,nom_point,coordonnee_point,duo_point,nature_duo_point,choix_duo_point)
    if choix_type== 0:
         exo.append("$$ %s \\ldots (%s%s) $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
         cor.append("$$ %s \\boxed{\\in} (%s%s) $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
    elif choix_type == 1:
         exo.append("$$ %s \\ldots [%s%s) $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
         cor.append("$$ %s \\boxed{\\notin} [%s%s) $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
    elif choix_type == 2:
         exo.append("$$ %s \\ldots [%s%s) $$" %(diagonale[choix_diagonale][0],diagonale[choix_diagonale][1],nom_point[4]))
         cor.append("$$ %s \\boxed{\\in} [%s%s) $$" %(diagonale[choix_diagonale][0],diagonale[choix_diagonale][1],nom_point[4]))
    elif choix_type == 3:
         exo.append("$$ %s \\ldots [%s%s] $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
         cor.append("$$ %s \\boxed{\\notin} [%s%s] $$" %(diagonale[choix_diagonale][0],nom_point[4],diagonale[choix_diagonale][1]))
    else:
         exo.append("$$ %s \\ldots [%s%s] $$" %(nom_point[4],diagonale[choix_diagonale][0],diagonale[choix_diagonale][1]))
         cor.append("$$ %s \\boxed{\\in} [%s%s] $$" %(nom_point[4],diagonale[choix_diagonale][0],diagonale[choix_diagonale][1]))
    return (exo, cor, question)
def PythagoreTexte(parametre):
    ## ---Initialisation---
    question = u"Calculer la mesure du 3\\up{eme} côté :"
    exo = [ ]
    cor = [ ]
    ## ---Calcul des paramètres---
    #nom
    nom_sommet = choix_points(3)
    duo_sommet = liste_combinaison(nom_sommet, 2)
    #mesure
    couples_pythagore = trouve_couples_pythagore(parametre[0])
    mesure_corrige = couples_pythagore[random.randrange(len(couples_pythagore))]
    choix = random.randrange(3)
    mesure_sujet = []
    for i in range(len(mesure_corrige)):
        if i == choix:
            mesure_sujet.append("\\ldots")
        else:
            mesure_sujet.append(mesure_corrige[i])
    ## ---Redaction---
    exo.append("%s%s%s est un triangle rectangle \\newline" %(nom_sommet[0],nom_sommet[1],nom_sommet[2]))
    cor.append("%s%s%s est un triangle rectangle \\newline" %(nom_sommet[0],nom_sommet[1],nom_sommet[2]))
    exo.append(u"Son hypoténuse est [%s%s] \\newline" %(duo_sommet[2][0],duo_sommet[2][1]))
    cor.append(u"Son hypoténuse est [%s%s] \\newline" %(duo_sommet[2][0],duo_sommet[2][1]))
    exo.append("On sait que :")
    cor.append("On sait que :")
    exo.append("\\begin{itemize}")
    cor.append("\\begin{itemize}")
    for i in range(len(duo_sommet)):
        exo.append("\\item $%s%s=\\unit{%s}{cm}$" % (duo_sommet[i][0],duo_sommet[i][1],mesure_sujet[i]))
        if i == choix:
            cor.append("\\item $%s%s=\\boxed{\\unit{%s}{cm}}$" % (duo_sommet[i][0],duo_sommet[i][1],mesure_corrige[i]))
        else:
            cor.append("\\item $%s%s=\\unit{%s}{cm}$" % (duo_sommet[i][0],duo_sommet[i][1],mesure_corrige[i]))
    exo.append("\\end{itemize}")
    cor.append("\\end{itemize}")
    return (exo, cor, question)
def exo_pythagore(parametre):
    types_exercice = [[2, random.randrange(2)], [0, 1]]
    random.shuffle(types_exercice)
    random.shuffle(types_exercice[0])
    random.shuffle(types_exercice[1])
    question = ""
    exo = ["\\begin{multicols}{2}", "\\begin{enumerate}"]
    cor = ["\\begin{multicols}{2}", "\\begin{enumerate}"]
    for j in range(2):
        while True:
            longueurs = couples_pythagore[random.randrange(len(couples_pythagore))]
            longueurs = [longueurs[i] / 10.0 for i in range(3)]
            if inegalite_triangulaire(longueurs):
                break
        noms = choix_points(3)
        angles = fig_tr_rect(longueurs)
        nom_tr = nom_triangle(noms)
        long0 , long1 = types_exercice[j]
        cotes = cotes_sommets(noms)
        enonce = \
            """    \\item Soit $%s$ un triangle rectangle en $%s$ tel que :\\par
$%s=\\unit[%s]{cm} \\text{ et }%s=\\unit[%s]{cm}$.\\par
Calculer la longueur $%s$.""" % \
            enonce_pythagore(noms, angles, longueurs, cotes, nom_tr, long0,
                             long1)
        exo.append(enonce)
        cor.append(enonce)
        cor.append("\\par\\dotfill{}\\par\n")
        cor.append(u"Le triangle $%s$ est rectangle en $%s$.\\par" % \
                   (nom_tr, noms[2]))
        cor.append(u"Son hypoténuse est $[%s]$.\\par" % (cotes[2]))
        cor.append(u"D'après le \\textbf{théorème de Pythagore} :" )
        cor.append("\\[%s^2=%s^2+%s^2\\]" % (cotes[2], cotes[0], cotes[1] ))
        if long0 == 2 or long1 == 2:
            cor.append("\\[%s^2=%s^2-%s^2\\kern1cm\\text{(On cherche }%s)\\]" %
                       (cotes[(3 - long0) - long1], cotes[2], cotes[((4 -
                       long0) - long1) % 2], cotes[(3 - long0) - long1]))
        if long0 == 2 or long1 == 2:
            cor.append("\\[%s^2=%s^2-%s^2\\]" % (cotes[(3 - long0) - long1],
                       nombre(longueurs[2]), nombre(longueurs[((4 - long0) -
                       long1) % 2])))
        else:
            cor.append("\\[%s^2=%s^2+%s^2\\]" % (cotes[2], nombre(longueurs[0]),
                       nombre(longueurs[1])))
        if long0 == 2 or long1 == 2:
            cor.append("\\[%s^2=%s-%s\\]" % (cotes[(3 - long0) - long1],
                       nombre(longueurs[2] ** 2), nombre(longueurs[((4 -
                       long0) - long1) % 2] ** 2)))
        else:
            cor.append("\\[%s^2=%s+%s\\]" % (cotes[2], nombre(longueurs[0] **
                       2), nombre(longueurs[1] ** 2)))
        if long0 == 2 or long1 == 2:
            cor.append("\\[%s^2=%s\\]" % (cotes[(3 - long0) - long1],
                       nombre(longueurs[2] ** 2 - longueurs[((4 - long0) -
                       long1) % 2] ** 2)))
        else:
            cor.append("\\[%s^2=%s\\]" % (cotes[2], nombre(longueurs[0] **
                       2 + longueurs[1] ** 2)))
        if long0 == 2 or long1 == 2:
            cor.append("\\[ \\boxed{\\text{Donc }%s=\\sqrt{%s}=\\unit[%s]{cm}}\\]" %
                       (cotes[(3 - long0) - long1], nombre(longueurs[2] ** 2 -
                       longueurs[((4 - long0) - long1) % 2] ** 2), nombre(longueurs[(3 -
                       long0) - long1])))
        else:
            cor.append("\\[\\boxed{\\text{Donc }%s=\\sqrt{%s}=\\unit[%s]{cm}}\\]" %
                       (cotes[2], nombre(longueurs[0] ** 2 + longueurs[1] **
                       2), nombre(longueurs[2])))
        if j == 0:
            exo.append("\\columnbreak")
            cor.append("\\columnbreak")
    exo.append("\\end{enumerate}\n\\end{multicols}\n")
    cor.append("\\end{enumerate}\n\\end{multicols}\n")
    return (exo, cor, question)
def exo_triangle_cercle(parametre):
    question = ""
    exo = []
    cor = []
    while True:
        longueurs = couples_pythagore[random.randrange(len(couples_pythagore))]
        longueurs = [longueurs[i] / 10.0 for i in range(3)]
        if inegalite_triangulaire(longueurs):
            break
    noms = choix_points(3)
    angles = fig_tr_rect(longueurs)
    nom_tr = nom_triangle(noms)
    long0 = random.randrange(3)
    long1 = (random.randrange(2) + 1 + long0) % 3
    cotes = cotes_sommets(noms)
    enonce = \
        u"""\\begin{minipage}{4cm}
\\begin{pspicture}(-2,-2)(2,2)
\\SpecialCoor\\psset{PointSymbol=x}
\\pstGeonode[PointName=%s,PosAngle=%s](1.5;%s){a}
\\pstGeonode[PointName=%s,PosAngle=%s](1.5;%s){b}
\\pstGeonode[PointName=%s,PosAngle=%s](1.5;%s){c}
\\pspolygon(a)(b)(c)\\pscircle(0,0){1.5}
\\rput(1.8;%s){$\\big(\\mathcal{C}\\big)$}
\\end{pspicture}
\\end{minipage}\\hfill
\\begin{minipage}{13cm}
$\\big(\\mathcal{C}\\big)$ est un cercle de diamètre $[%s]$ et $%s$ est un point de $\\big(\\mathcal{C}\\big)$.\\par
On donne $%s=\\unit[%s]{cm}\\text{ et }%s=\\unit[%s]{cm}$.\\par
Calculer la longueur $%s$.""" % \
        enonce_pythagore(noms, angles, longueurs, cotes, nom_tr, long0,
                         long1, diam=1)
    exo.append(enonce)
    cor.append(enonce)
    cor.append("\\par\\dotfill{}\\\\\n")
    cor.append(u"$[%s]$ est le diamètre du cercle circonscrit au triangle $%s$.\\par" %
               (cotes[2], nom_tr))
    cor.append("\\fbox{Donc le triangle %s est rectangle en %s.}\\\\\n" %
               (nom_tr, noms[2]))
    cor.append(u"D'après le \\textbf{théorème de Pythagore} :")
    cor.append(u"\\[%s^2=%s^2+%s^2\\kern1cm\\text{(car }[%s]\\text{ est \\emph{l'hypoténuse})}\\]" %
               (cotes[2], cotes[0], cotes[1], cotes[2]))
    if long0 == 2 or long1 == 2:
        cor.append("\\[%s^2=%s^2-%s^2\\kern1cm\\text{(On cherche }%s)\\]" %
                   (cotes[(3 - long0) - long1], cotes[2], cotes[((4 -
                   long0) - long1) % 2], cotes[(3 - long0) - long1]))
    if long0 == 2 or long1 == 2:
        cor.append("\\[%s^2=%s^2-%s^2\\]" % (cotes[(3 - long0) - long1],
                   nombre(longueurs[2]), nombre(longueurs[((4 - long0) -
                   long1) % 2])))
    else:
        cor.append("\\[%s^2=%s^2+%s^2\\]" % (cotes[2], nombre(longueurs[0]),
                   nombre(longueurs[1])))
    if long0 == 2 or long1 == 2:
        cor.append("\\[%s^2=%s-%s\\]" % (cotes[(3 - long0) - long1],
                   nombre(longueurs[2] ** 2), nombre(longueurs[((4 -
                   long0) - long1) % 2] ** 2)))
    else:
        cor.append("\\[%s^2=%s+%s\\]" % (cotes[2], nombre(longueurs[0] **
                   2), nombre(longueurs[1] ** 2)))
    if long0 == 2 or long1 == 2:
        cor.append("\\[%s^2=%s\\]" % (cotes[(3 - long0) - long1],
                   nombre(longueurs[2] ** 2 - longueurs[((4 - long0) -
                   long1) % 2] ** 2)))
    else:
        cor.append("\\[%s^2=%s\\]" % (cotes[2], nombre(longueurs[0] **
                   2 + longueurs[1] ** 2)))
    if long0 == 2 or long1 == 2:
        cor.append("\\[\\boxed{\\text{Donc }%s=\\sqrt{%s}=\\unit[%s]{cm}}\\]" %
                   (cotes[(3 - long0) - long1], nombre(longueurs[2] ** 2 -
                   longueurs[((4 - long0) - long1) % 2] ** 2), nombre(longueurs[(3 -
                   long0) - long1])))
    else:
        cor.append("\\[\\boxed{\\text{Donc }%s=\\sqrt{%s}=\\unit[%s]{cm}}\\]" %
                   (cotes[2], nombre(longueurs[0] ** 2 + longueurs[1] **
                   2), nombre(longueurs[2])))
    exo.append("\\end{minipage}\n")
    cor.append("\\end{minipage}\n")
    return (exo, cor, question)