# -*- coding: utf-8 -*- # # Pyromaths # Un programme en Python qui permet de créer des fiches d'exercices types de # mathématiques niveau collège ainsi que leur corrigé en LaTeX. # Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # from random import randint, randrange from ..outils.decimaux import decimaux, decimaux_quiz import math def ncotation(A,B,longueur,couleur=""): """trace une flèche et inscrit horizontalement, dessous, la longueur entre A et B où A et B sont des \node""" linecouleur = "" if couleur!="": linecouleur = ",linecolor = %s"%couleur couleur="\\color{%s}"%couleur return u"\\ncline[linestyle=dashed, offset = -1.5, linewidth = 0.4pt %s]{<->}{%s}{%s} \\Bput{%s %s}" %(linecouleur,A, B,couleur,longueur ) def ncotation_h(A,B,longueur,couleur=""): """idem mais au dessus de la flèche""" linecouleur = "" if couleur!="": linecouleur = ",linecolor = %s"%couleur couleur="\\color{%s}"%couleur return u"\\ncline[linestyle=dashed, offset = 1.5, linewidth = 0.4pt %s]{<->}{%s}{%s} \\Aput{%s %s}" %(linecouleur,A, B,couleur,longueur ) def exo_echelles(): """À partir d'un plan tracé, déterminer l'échelle et des longueurs déterminées.""" #Échelle echelle = [ 100, 250, 400, 500, 750, 1000][randrange(6)] #figure : un plan d'appartement déssiner en psTricks a, d = randint(40,60), randint(36,45) b, c = randint(8, d - 27), randint(9, a - 25 ) xF = a - c xE = xF - 6 yK = b + 9 yF = b - 6 yH = b #Calculs des grandeurs réelles en mm ! reels = [echelle * a, echelle * b, echelle * c, echelle * d] plan = [a, b, c, d] #choix permet de choisir si on donne a, b, c ou d en énoncé choix = randrange(4) reponses = ["a", "b", "c", "d"] enonce = reponses.pop(choix) #sur la deuxième ligne du tableau, on écrit en cm, en gras, les nombres calculés tab_reels = [ "\\bf"*(i!=choix) + decimaux(reels[i]/10.0) for i in range(4)] #Pour placer les quatre lettres sur le plan cotation_couleur = [["a", ""], ["b", ""], ["c", ""], ["d", ""]] #la longueur donnée est tracée en bleu cotation_couleur[choix][1] = "enonce" #figure PSTricks en fonction des paramètres a, d, xE, XF, yF figure = ["\\psset{PointName = none, PointSymbol = none, unit = 1mm, linewidth = .5pt}", "\\definecolor{enonce}{rgb}{0.11,0.56,0.98}", "\\begin{pspicture}(-10mm, -10mm)(50mm ,50mm)", #le rectangle ABCD "\\pstGeonode[CurveType = polygon, linewidth = 1pt](0, 0)A(%s,0)B (%s, %s)C (0, %s)D"%(a, a, d, d), #les points permettant de placer les cloisons "\\pstGeonode(%s, 0){E1}(%s, %s){E2}(%s, 0){F1}(%s, %s){F2}"%(xE, xE, yF, xF, xF, yF), "\\pstGeonode(%s, %s){G1}(%s, %s){G2}(%s, %s){G3}"%(a, b, xF, b, xF, 25), "\\pstGeonode(%s, %s){H1}(%s, %s){H2}(%s, %s){H3}(%s, %s){H4}"%(xE, b, xE, 25, xE, yK, 15, yK), "\\pstGeonode(0, %s){K2}(7, %s){K1}"%(yK, yK), "\\pstGeonode(%s, %s){J1}(%s, %s){J2}(%s, %s){J3}(%s, %s){J4}"%(xE, d - 7, xE, d, xF, d - 7, xF, d), #trace les cloisons, limitées par des tirets "\\ncline{-|}{E1}{E2}\\ncline{-|}{F1}{F2}", "\\ncline{|-}{J1}{J2}\\ncline{|-}{J3}{J4}", "\\ncline{|-}{K1}{K2}", "\\ncline{G1}{G2}\\ncline{|-|}{G3}{G2}", "\\ncline{|-|}{H1}{H2}\\ncline{-|}{H3}{H4}", #place les cotations sr la figure, l'énoncé en bleu ncotation_h("D", "C", cotation_couleur[0][0], cotation_couleur[0][1]), ncotation("B", "G1", cotation_couleur[1][0], cotation_couleur[1][1]), ncotation("F1", "B", cotation_couleur[2][0], cotation_couleur[2][1]), ncotation_h("A", "D", cotation_couleur[3][0], cotation_couleur[3][1]), "\\end{pspicture}"] exo = [_(u"\\exercice Sur ce plan, la longueur $%s$ mesure en réalité \\unit[%s]{m} :\n")%(enonce, decimaux(reels[choix]/1000.0))] \ + figure +\ ["\\begin{enumerate}", _(u"\\item Déterminer l'échelle de ce plan."), _(u"\\item Déterminer les longueurs réelles $%s$, $%s$ et $%s$.")%(reponses[0], reponses[1], reponses[2]), "\\end{enumerate}"] cor = [_(u"\\exercice* Sur ce plan, la longueur $%s$ mesure en réalité \\unit[%s]{m} : \n")%(enonce, decimaux(reels[choix]/1000.0))] \ + figure +\ ["\\begin{enumerate}", _(u"\\item Déterminer l'échelle de ce plan.\\par"), _(u"Sur le plan, je mesure que $%s=\\unit[%s]{cm}$.\\par")%(enonce, decimaux(plan[choix]/10.0) ), _(u"Or on sait que en réalité $%s = \\unit[%s]{m} = \\unit[%s]{cm}$")%(enonce, decimaux(reels[choix]/1000.0),decimaux(reels[choix]/10.0)), _(u" et $%s \\div %s = %s$.\\par")%(decimaux(reels[choix]), decimaux(plan[choix]), decimaux(echelle)), _(u"L'échelle de ce plan est donc $1/%s^e$.")%echelle, _(u"\\item Déterminer les longueurs réelles $%s$, $%s$ et $%s$.\n")%(reponses[0], reponses[1], reponses[2]), _(u"Grâce à la question précédente, je peux compléter le tableau :\n"), "\\begin{tabular}{|l|c|c|c|c|c}", ("\\multicolumn{1}{c}{}"+"&\\multicolumn{1}{c}{$%s$}"*4+"\\\\")%("a", "b", "c", "d"), "\\cline{1-5}", _(u"Sur le plan (en cm) & %s & %s & %s & %s &\\rnode{plan1}{}\\\\")%tuple(map(lambda n:decimaux(n/10.0),plan)), "\\cline{1-5}", _(u"En réalité (en cm) & %s & %s & %s & %s &\\rnode{plan2}{}\\\\")%tuple(tab_reels), "\\cline{1-5}", "\\end{tabular}\n", _("\\ncbar{->}{plan1}{plan2}\\Aput{$\\times %s$}")%echelle, _(u"Pour conclure, on convertit ses longueurs en m :\\par"), "$$a = \\unit[%s]{m} \\quad ; \\quad b = \\unit[%s]{m} \\quad ; \\quad c = \\unit[%s]{m} \\quad ; \\quad d =\\unit[%s]{m}$$"\ %tuple(map(lambda n:decimaux(n/1000.0),reels)), "\\end{enumerate}"] quiz = [u"cloze"] quiz_nom = _(u"Échelles") quiz_exo_cor = (_(u"Dans une pièce la mesure de la longueur d'un mur a résulté être de $$%s m$$.
\n")%(decimaux_quiz(reels[choix]/1000.0))) quiz_exo_cor += (_(u"Si dans un plan de la pièce, dit mur mesure $$%s cm$$.
\n") % (decimaux_quiz(plan[choix]/10.0))) quiz_exo_cor += (_(u"Répond: L'échelle du plan est de $$1:$$ {1:NUMERICAL:=%s}
\n") % decimaux_quiz(echelle,1)) quiz_exo_cor += _(u"Calcule dans ce même plan, utilisant l'échelle que tu as écrit avant, les mesures:
\n") for i in range(len(tab_reels)): quiz_exo_cor += (_(u"• Un mur de $$%s cm$$ dans le plan, mesure réellement") % (map(lambda n:decimaux_quiz(n/10.0),plan)[i])) ## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1 quiz_exo_cor += (u"{1:SHORTANSWER:%s100%s%s} $$m$$.
\n" % ("%", "%", map(lambda n:decimaux_quiz(n/1000.0,0),reels)[i])) quiz.append([quiz_nom, quiz_exo_cor[0:(len(quiz_exo_cor)-1)], ""]) return exo, cor, quiz def exo_fruits(): fruit = [_(u"Cerises"), _(u"Tomates"), _(u"Pommes"), _(u"Poires"), _(u"Raisin"), _(u"Oranges")][randrange(6)] while 1: a, b, c = randint(10, 50)/10.0, randint(10, 50)/10.0, randint(10, 50)/10.0 if a != b and a != c and b != c: break tarif = randint(20, 50)/10.0 fruits_c = (fruit, a, b, c) fruits_e = (fruit, decimaux(a), decimaux(b), "\\hspace*{1cm}") prix_c = (_(u"Prix"), decimaux(fruits_c[1]*tarif), decimaux(fruits_c[2]*tarif), decimaux(fruits_c[3]*tarif)) prix_e = (_(u"Prix"), decimaux(fruits_c[1]*tarif), "\\hspace*{1cm}", decimaux(fruits_c[3]*tarif)) fruits_e_quiz = (fruit, decimaux_quiz(a), decimaux_quiz(b), ("{1:SHORTANSWER:%s100%s%s}"%("%", "%", decimaux_quiz(c,0)))) prix_e_quiz = (_(u"Prix"), decimaux_quiz(fruits_c[1]*tarif),("{1:SHORTANSWER:%s100%s%s}"%("%", "%", decimaux_quiz(b*tarif,0))), decimaux_quiz(fruits_c[3]*tarif)) fruits_c = (fruit, decimaux(a), decimaux(b), decimaux(c)) tableau_exo = ["\\begin{center}","\\begin{tabular}{|l|c|c|c|}", "\hline", _(u"%s (en kg) & %s & %s & %s \\\\")%fruits_e, "\hline", _(u"%s (en euros) & %s & %s & %s \\\\")%prix_e, "\hline", "\\end{tabular}","\\end{center}"] tableau_cor = ["\\begin{center}","\\begin{tabular}{|l|c|c|c|}", "\hline", _(u"%s (en kg) & %s & %s & \\bf %s \\\\")%fruits_c, "\hline", _(u"%s (en euros) & %s & \\bf %s & %s \\\\")%prix_c, "\hline", "\\end{tabular}","\\end{center}"] exo = [_(u"\\exercice Le prix à payer est proportionnel à la masse de fruits achetés.\\par"), _(u"Détermine la valeur des cases vides")] cor = [_(u"\\exercice* Le prix à payer est proportionnel à la masse de fruits achetés.\\par"), _(u"Détermine la valeur des cases vides")] exo += ["\n"] + tableau_exo cor += ["\n"] + tableau_cor cor.append(_("$$\\frac{%s \\times %s}{%s} = %s \\quad;\\qquad")%(prix_e[1], fruits_e[2], fruits_e[1],prix_c[2])) cor.append(_("\\frac{%s \\times %s}{%s} = %s $$")%(fruits_c[1], prix_c[3], prix_e[1],fruits_c[3])) quiz = [u"cloze"] quiz_nom = _(u"Proportionnalité: Boutique") quiz_exo_cor = _(u'Dans une boutique de fruit, le prix à payer est directement proportionnel au poids des fruits achetés.
\n') quiz_exo_cor += _(u'Observe la suivante planche et complète les vides:

\n') quiz_exo_cor += '\n' quiz_exo_cor += '\n' quiz_exo_cor += ('\n' % fruits_e_quiz[0]) quiz_exo_cor += ('\n' % fruits_e_quiz[1]) quiz_exo_cor += ('\n' % fruits_e_quiz[2]) quiz_exo_cor += ('\n' % fruits_e_quiz[3]) quiz_exo_cor += '\n' quiz_exo_cor += ('\n' % prix_e_quiz[0]) quiz_exo_cor += ('\n' % prix_e_quiz[1]) quiz_exo_cor += ('\n' % prix_e_quiz[2]) quiz_exo_cor += ('\n' % prix_e_quiz[3]) quiz_exo_cor += '\n
$$\\text{%s (en kg)}$$$$%s$$$$%s$$%s
$$\\text{%s (en euros)}$$$$%s$$%s$$%s$$
' quiz.append([quiz_nom ,quiz_exo_cor, ""]) return (exo, cor, quiz)