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
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
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
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
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
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
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
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])
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])
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
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
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
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
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
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
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