def ecr_sc(parametre): from math import log10, floor question = "" exo = [u"Compléter par le nombre qui convient :", "\\begin{multicols}{3}", " \\noindent%", " \\begin{enumerate}"] cor = [u"Compléter par le nombre qui convient :", "\\begin{multicols}{3}", " \\noindent%", " \\begin{enumerate}"] for i in range(6): a = val_sc() exp = int(floor(log10(a))) a_sc = (a * 1.) / 10 ** exp s_a = decimaux(a, 1) s_a_sc = decimaux(a_sc, 1) if randrange(2): # forme : a=a_sc*... exo.append("\\item $%s=%s\\times\\dotfill$" % (s_a, s_a_sc)) cor.append("\\item $%s=%s\\times\\mathbf{10^{%s}}$" % (s_a, s_a_sc, decimaux(exp, 1))) else: # forme : a_sc*...=a exo.append("\\item $%s\\times\\dotfill=%s$" % (s_a_sc, s_a)) cor.append("\\item $%s\\times\\mathbf{10^{%s}}=%s$" % (s_a_sc, decimaux(exp, 1), s_a)) exo.append("\\end{enumerate}") exo.append("\\end{multicols}\n") cor.append("\\end{enumerate}") cor.append("\\end{multicols}\n") return (exo, cor, question)
def tex_proprietes_neg(parametre): question = "" exo = [u"Écrire sous la forme d'une puissance de 10 puis donner l'écriture", u" décimale de ces nombres :", "\\begin{multicols}{2}", " \\noindent%", " \\begin{enumerate}"] cor = [u"Écrire sous la forme d'une puissance de 10 puis donner l'écriture", u" décimale de ces nombres :", "\\begin{multicols}{2}", " \\noindent%", " \\begin{enumerate}"] lexos = [0, 1, 2, 3, 0, 1, 2, 3] #0: a^n*a^p ; 1: (a^n)^p ; 2:a^n/a^p for i in range(len(lexos)): lexp = [randrange(-6, 6) for i in range(2)] j = lexos.pop(randrange(len(lexos))) # FIXME : À finir if j == 0: while abs(lexp[0] + lexp[1]) > 10: lexp = [randrange(-6, 6) for i in range(2)] exo.append("\\item $10^{%s} \\times 10^{%s} = \\dotfill$" % tuple(lexp)) cor.append("\\item $10^{%s}\\times 10^{%s}=" % tuple(lexp)) cor.append("10^{%s+%s}=" % (lexp[0], tex_coef(lexp[1], '', bpn=1))) cor.append("10^{%s}=%s$" % (lexp[0] + lexp[1], decimaux(10 ** (lexp[0] + lexp[1]), 1))) elif j == 1: while abs(lexp[0] * lexp[1]) > 10: lexp = [randrange(-6, 6) for i in range(2)] exo.append("\\item $(10^{%s})^{%s}=\\dotfill$" % (lexp[0], lexp[1])) cor.append("\\item $(10^{%s})^{%s}=" % tuple(lexp)) cor.append("10^{%s \\times %s}=" % (lexp[0], tex_coef(lexp[1], '', bpn=1))) cor.append("10^{%s}=%s$" % (lexp[0] * lexp[1], decimaux(10 ** (lexp[0] * lexp[1]), 1))) elif j == 2: while abs(lexp[0] - lexp[1]) > 10: lexp = [randrange(-6, 6) for i in range(2)] exo.append("\\item $\\dfrac{10^{%s}}{10^{%s}}=\\dotfill$" % tuple(lexp)) cor.append("\\item $\\dfrac{10^{%s}}{10^{%s}}=" % tuple(lexp)) cor.append("10^{%s-%s}=" % (lexp[0], tex_coef(lexp[1], '', bpn=1))) cor.append("10^{%s}=%s$" % (lexp[0] - lexp[1], decimaux(10 ** (lexp[0] - lexp[1]), 1))) exo.append("\\end{enumerate}") exo.append("\\end{multicols}\n") cor.append("\\end{enumerate}") cor.append("\\end{multicols}\n") return (exo, cor, question)
def ecritureScientifique(parametre): question = u"Compléter l\'écriture scientifique :" exo = [ ] cor = [ ] a = val_sc() exp = int(floor(log10(a))) a_sc = (a * 1.) / 10 ** exp s_a = decimaux(a, 1) s_a_sc = decimaux(a_sc, 1) if randrange(2): # forme : a=a_sc*... exo.append("$$%s=%s\\times\\ldots$$" % (s_a, s_a_sc)) cor.append("$$%s=%s\\times\\boxed{10^{%s}}$$" % (s_a, s_a_sc, decimaux(exp, 1))) else: # forme : a_sc*...=a exo.append("$$%s\\times\\ldots=%s$$" % (s_a_sc, s_a)) cor.append("$$%s\\times\\boxed{10^{%s}}=%s$$" % (s_a_sc, decimaux(exp, 1), s_a)) return (exo, cor, question)
def anteimage(fonc,A,B): #Génère la 1ère question et sa réponse l=[' l\'image de ',' un nombre qui a pour image ',u' un antécédent de '] lcor=[' est l\'image de ',' a pour image ',u' est un antécédent de '] #liste pour le corrigé i=random.randrange(0,2) j=i if i==1: j=i+random.randrange(0,2) res=[] res.append('Donner '+l[j]+'$'+decimaux(str(A[i]))+'$'+' par la fonction '+'\\textit{'+fonc+'}.') res.append('$'+decimaux(str(A[abs(i-1)]))+'$' + lcor[j]+'$'+decimaux(str(A[i]))+'$'+' par la \\hbox{fonction '+'\\textit{'+fonc+'}}.') if i==0: res.append(doublefleche((A[0],0),A)) res.append(doublefleche(A,(0,A[1]))) else: res.append(doublefleche((0,A[1]),A)) res.append(doublefleche(A,(A[0],0))) i=abs(i-1) j=i if i==1: j=i+random.randrange(0,2) res.append('Donner '+l[j]+'$'+decimaux(str(B[i]))+'$'+' par la fonction '+'\\textit{'+fonc+'}.') res.append('$'+decimaux(str(B[abs(i-1)]))+'$'+lcor[j]+'$'+decimaux(str(B[i]))+'$'+' par la \\hbox{fonction '+'\\textit{'+fonc+'}}.') if i==0: res.append(doublefleche((B[0],0),B)) res.append(doublefleche(B,(0,B[1]))) else: res.append(doublefleche((0,B[1]),B)) res.append(doublefleche(B,(B[0],0))) return res
def ArrondirDecimal(parametre): question = "Arrondir :" exo = [] cor = [] # Génération des variables (nombre, index_precision, defaut, exces, arrondi) = valeurs(parametre[0], parametre[1]) # Choix du type d'arrondi type = randrange(3) if type == 0: solution = arrondi elif type == 1: solution = defaut elif type == 2: solution = exces # Affichage exo.append("\\begin{center}") exo.append("%s %s %s" % (decimaux(nombre),nom_precision[index_precision],nom_type[type])) exo.append("\\end{center}") cor.append("$$ %s < %s < %s $$" % (decimaux(defaut),decimaux(nombre),decimaux(exces))) cor.append("\\begin{center}") cor.append("L\'arrondi %s %s est $ \\boxed{%s} $" % (nom_precision[index_precision], nom_type[type], decimaux(solution))) cor.append("\\end{center}") return (exo, cor, question)
def IntercalerDecimal(parametre): question = "Intercaler un nombre entre :" exo = [] cor = [] # Génération des variables (nombre, index_precision, defaut, exces, arrondi) = valeurs(parametre[0], parametre[1]) # Affichage exo.append("\\begin{center}") exo.append("%s et %s" % (decimaux(defaut),decimaux(exces))) exo.append("\\end{center}") exo.append("$$ %s < \\ldots < %s $$" % (decimaux(defaut),decimaux(exces))) cor.append("$$ %s < \\boxed{%s} < %s $$" % (decimaux(defaut),decimaux(nombre),decimaux(exces))) return (exo, cor, question)
def EncadrerDecimal(parametre): question = u"Compléter l\'encadrement de :" exo = [] cor = [] # Génération des variables (nombre, index_precision, defaut, exces, arrondi) = valeurs(parametre[0], parametre[1]) # Affichage exo.append("\\begin{center}") exo.append("%s %s" % (decimaux(nombre),nom_precision[index_precision])) exo.append("\\end{center}") if randrange(2): exo.append("$$ \\ldots < %s < %s $$" % (decimaux(nombre),decimaux(exces))) cor.append("$$ \\boxed{%s} < %s < %s $$" % (decimaux(defaut),decimaux(nombre),decimaux(exces))) cor.append("\\begin{center}") cor.append(u"La valeur par défaut %s est $ \\boxed{%s} $" % (nom_precision[index_precision],decimaux(defaut))) cor.append("\\end{center}") else: exo.append("$$ %s < %s < \\ldots $$" % (decimaux(defaut),decimaux(nombre))) cor.append("$$ %s < %s < \\boxed{%s} $$" % (decimaux(defaut),decimaux(nombre),decimaux(exces))) cor.append("\\begin{center}") cor.append(u"La valeur par excès %s est $ \\boxed{%s} $" % (nom_precision[index_precision],decimaux(exces))) cor.append("\\end{center}") return (exo, cor, question)
def tex_coord(coord): #Affiche les coordonnées des points au format LaTeX return '\\hbox{$('+decimaux(str(coord[0]), 1) + '~;~' + decimaux(str(coord[1]), 1)+')$}'
def main(parametre): nbpts = 13 noms_pts=(noms_sommets(nbpts)) coord_pts=coordo_pts(nbpts) voc=['abscisse',u'ordonnée'] rg1=random.randrange(0,2) rg2=abs(rg1-1) while len(coord_pts)<nbpts: coord_pts=coordo_pts(nbpts) question = "" exo=["\\parbox{0.4\\linewidth}{", "\\begin{enumerate}", u"\\item Donner les coordonnées des points %s, %s, %s, %s, %s et %s." % tuple(noms_pts[0:6]), u"\\item Placer dans le repère les points %s, %s, %s, %s, %s et %s" %noms_pts[6:12] +u" de coordonnées respectives %s, %s, %s, %s, %s et %s. " %tuple(tex_liste_co(coord_pts[6:12])), u"\\item Placer dans le repère le point %s d'%s %s et d'%s %s" %(noms_pts[12],voc[rg1],decimaux(str(coord_pts[12][rg1])),voc[rg2],decimaux(str(coord_pts[12][rg2]))), "\\end{enumerate}}\\hfill ", "\\parbox{0.55\\linewidth}{", "\\psset{unit=0.8cm}", "\\begin{pspicture}(-4.95,-4.95)(4.95,4.95)", "\\psgrid[subgriddiv=2, subgridcolor=lightgray, gridlabels=8pt](0,0)(-5,-5)(5,5)", "\\psline[linewidth=1.2pt]{->}(-5,0)(5,0)", "\\psline[linewidth=1.2pt]{->}(0,-5)(0,5)", place_points(coord_pts[0:6],noms_pts[0:6]), "\\end{pspicture}}"] cor=["\\parbox{0.4\\linewidth}{", "\\psset{unit=0.8cm}", "\\begin{pspicture}(-5,-5)(5,5)", "\\psgrid[subgriddiv=2, subgridcolor=lightgray, gridlabels=8pt](0,0)(-5,-5)(5,5)", "\\psline[linewidth=1.2pt]{->}(-5,0)(5,0)", "\\psline[linewidth=1.2pt]{->}(0,-5)(0,5)", place_points(coord_pts[0:13],noms_pts[0:13]), "\\end{pspicture}}\\hfill", "\\parbox{0.5\\linewidth}{", "\\begin{enumerate}", u"\\item Donner les coordonnées des points %s, %s, %s, %s, %s et %s." % tuple(noms_pts[0:6])] i=0 while i<6: cor.append(u"Les coordonnées du point %s sont %s \n"%(noms_pts[i],affiche_coord(coord_pts[i]))) i=i+1 cor[len(cor):len(cor)]=[u"\\item Placer dans le repère les points %s, %s, %s, %s, %s et %s" %noms_pts[6:12] +u" de coordonnées respectives %s, %s, %s, %s, %s et %s. " %tuple(tex_liste_co(coord_pts[6:12])), u"\\item Placer dans le repère le point %s d'%s %s et d'%s %s" %(noms_pts[12],voc[rg1],decimaux(str(coord_pts[12][rg1])),voc[rg2],decimaux(str(coord_pts[12][rg2]))), "\\end{enumerate}"] cor.append("}") return(exo,cor,question)
def affiche_coord(coord): """Affiche les coordonnées des points au format LaTeX""" return '\\hbox{$('+decimaux(str(coord[0]), 1) + '~;~' + \ decimaux(str(coord[1]), 1)+')$}'
def exprfonc(f,i,A,B): #Génère la 3e question. #A est sur l'axe des ordonnées, f est le nom de la fonction u=coefdir(A,B) if A[1]>=0: b='+'+decimaux(str(A[1])) else: b=decimaux(str(A[1])) if u[1]==1: coef=decimaux(str(u[0])) if u[0]==-1: coef='-' #utilisé dans l'expression de la fonction if u[0]==1: coef='' coefres=decimaux(str(u[0])) #résultat utilisé pour a else: if u[0]>0: coef='\\dfrac{'+decimaux(str(u[0]))+'}{'+decimaux(str(u[1]))+'}' else: coef='-\\dfrac{'+decimaux(str(abs(u[0])))+'}{'+decimaux(str(u[1]))+'}' coefres=coef if A[1]-B[1]>0: deltay='+'+decimaux(str(A[1]-B[1])) else : deltay=decimaux(str(A[1]-B[1])) if A[0]-B[0]>0: deltax='+'+decimaux(str(A[0]-B[0])) else: deltax=decimaux(str(A[0]-B[0])) if float(B[0])<0 : mid11=float(B[0])-0.75 mid12=float((B[1]+A[1]))/2 #milieu de la flèche verticale else: mid11=float(B[0])+0.75 mid12=float((B[1]+A[1]))/2 if float(B[0])*float(u[1]/u[0])>0 : mid21=float((A[0]+B[0]))/2 mid22=A[1]-0.6 #milieu de la flèche horizontale else : mid21=float((A[0]+B[0]))/2 mid22=A[1]+0.5 if mid12 < 0 and mid12 >-0.8: mid12=-1 if mid12 >= 0 and mid12 < 0.5: mid12=0.5 if mid11 < 0 and mid11 >-0.8: mid11=-1 if mid11 >=0 and mid11 < 0.5: mid11=0.5 if mid21 < 0 and mid21 >-0.8: mid21=-1 if mid21 >=0 and mid21 < 0.5: mid21=0.5 if mid22 < 0 and mid22 >-0.8: mid22=-1 if mid22 >= 0 and mid22 < 0.5: mid22=0.5 mid1=(mid11,mid12) mid2=(mid21,mid22) l=[u'Déterminer l\'expression de la fonction $'+f+u'$ représentée ci-contre par la droite ($d_'+str(i)+'$).', u'On lit l\'ordonnée à l\'origine et le coefficient de la fonction affine sur le graphique.\\\ ', '$'+f+'(x)=ax+b$ ' +'avec $b='+ decimaux(str(A[1]))+'$ et $a='+'\\dfrac{'+deltay+'}{'+deltax+'}='+coefres+'$.\\\ ', 'L\'expression de la fonction $'+f+'$ est $'+f+'(x)='+coef+'x'+b+'$.', doublefleche(B,(B[0],A[1])), doublefleche((B[0],A[1]),A), '\\rput'+str(mid1)+'{('+deltay+')}', '\\rput'+str(mid2)+'{('+deltax+')}'] return l
def 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 u=coefdir(A,B) if A[1]>=0: b='+'+decimaux(str(A[1])) else: b=decimaux(str(A[1])) if u[1]==1: coef=decimaux(str(u[0])) if u[0]==-1: coef='-' if u[0]==1: coef='' x1=decimaux(str(B[0])) y1=decimaux(str(B[1])) u[0]=u[0]*B[0] else: B=(u[1],u[0]+float(A[1])) if not dansrep(B,xmin,xmax,ymin,ymax): B=(-u[1],-u[0]+float(A[1])) x1=decimaux(str(B[0])) y1=decimaux(str(B[1])) if u[0]>0: coef='\\dfrac{'+decimaux(str(u[0]))+'}{'+decimaux(str(u[1]))+'}' else: coef='-\\dfrac{'+decimaux(str(abs(u[0])))+'}{'+decimaux(str(u[1]))+'}' x0='0' y0=b if coef=='' or (coef=='-' and B[0]>0) : st='On sait que $'+f+'(0)='+decimaux(str(A[1]))+'$ et $'+f+'('+x1+')='+coef+x1+b+'='+y1+'$.' elif coef=='-' and B[0]<0: st='On sait que $'+f+'(0)='+decimaux(str(A[1]))+'$ et $'+f+'('+x1+')='+coef+'('+x1+')'+b+'='+y1+'$.' elif B[0]<0: st='On sait que $'+f+'(0)='+decimaux(str(A[1]))+'$ et $'+f+'('+x1+')='+coef+' \\times ('+x1+')'+b+'='+decimaux(str(u[0]))+b+'='+y1+'$.' else: st='On sait que $'+f+'(0)='+decimaux(str(A[1]))+'$ et $'+f+'('+x1+')='+coef+' \\times '+x1+b+'='+decimaux(str(u[0]))+b+'='+y1+'$.' l=[u'Tracer la droite représentative ($d_'+str(i)+'$) de la fonction $'+f+':x\\longmapsto '+coef+'x'+b+'$.', st, '\\psdot [dotsize=4.5pt,dotstyle=x]'+str(A), '\\psdot [dotsize=4.5pt,dotstyle=x]'+str(B), ] return l
def ArrondirNombreDecimal(parametre): """Crée et corrige un exercice d'arrondis avec les encadrements.""" hasard = [valide_hasard() for i in range(4)] precision = [ u"au millième", u"au centième", u"au dixième", u"à l'unité", u"à la dizaine", u"à la centaine", "au millier", u"à la dizaine de milliers", ] choix = [(i, j) for i in range(7) for j in range(3)] shuffle(choix) choix_precision = [choix[i][0] for i in range(4)] choix_supinf = [choix[i][1] for i in range(4)] ## choix_precision = [randint(0, 7), randint(0, 7), randint(0, 7), ## randint(0, 7)] ## choix_supinf = [randint(0, 2), randint(0, 2), randint(0, 2), randint(0, 2)] supinf = ["", u" par défaut", u" par excès"] # FIXME # Arrondir n'est pas synonyme de valeur approchée # Valeur approchée par excès # Valeur approchée par défaut # Arrondi = la « meilleure » valeur approchée # et ne paraît employé ici correctement nombres = [ (hasard[0]) / (10 ** (-choix_precision[0] + 4)), (hasard[1]) / (10 ** (-choix_precision[1] + 4)), (hasard[2]) / (10 ** (-choix_precision[2] + 4)), (hasard[3]) / (10 ** (-choix_precision[3] + 4)), ] question = "" exo = ["\\begin{enumerate}"] cor = ["\\begin{enumerate}"] for k in range(4): exo.append( "\\item Arrondir " + decimaux(nombres[k]) + " " + precision[choix_precision[k]] + supinf[choix_supinf[k]] + "." ) arrondi = round(nombres[k], -choix_precision[k] + 3) if arrondi > nombres[k]: defaut = arrondi - 10 ** (choix_precision[k] - 3) exc = arrondi if arrondi <= nombres[k]: defaut = arrondi exc = arrondi + 10 ** (choix_precision[k] - 3) if choix_supinf[k] == 0: solution = arrondi elif choix_supinf[k] == 1: solution = defaut elif choix_supinf[k] == 2: solution = exc cor.append( "\\item L'encadrement de " + decimaux(nombres[k]) + " " + precision[choix_precision[k]] + " est :\\par" ) cor.append(decimaux(defaut) + " < " + decimaux(nombres[k]) + " < " + decimaux(exc) + "\\par") cor.append( u"On en déduit que son arrondi " + precision[choix_precision[k]] + " " + supinf[choix_supinf[k]] + " est : " + decimaux(solution) + "." ) exo.append("\\end{enumerate}") cor.append("\\end{enumerate}") return (exo, cor, question)