source: pyromaths/trunk/fuentes/src/pyromaths/ex/cinquiemes/fractions.py

Last change on this file was 2151, checked in by jrpelegrina, 3 years ago

WIP in valencian translation

File size: 7.2 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Pyromaths
5# Un programme en Python qui permet de créer des fiches d'exercices types de
6# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
7# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22#
23
24# from pyromaths.classes.Fractions import Fraction  # Fractions de pyromaths
25import random
26from pyromaths.outils import Arithmetique
27from pyromaths.outils.Priorites3 import texify, priorites
28
29
30def fractions_egales():
31    exo = ["\\exercice", _(u"Compléter :"), "\\begin{multicols}{4}",
32           \\begin{enumerate}"]
33    cor = ["\\exercice*", _(u"Compléter :"), "\\begin{multicols}{4}",
34           \\begin{enumerate}"]
35    for dummy in range(8):
36        n = d = 1
37        while n == d:
38            n = random.randrange(1, 11)
39            d = random.randrange(2, 11)
40        c = random.randrange(2, 11)
41        cas = random.randrange(2)
42        if cas:
43            enonce = [n, d, n * c, d * c]
44            solution = [n, d, n * c, d * c]
45        else:
46            enonce = [n * c, d * c, n, d]
47            solution = [n * c, d * c, n, d]
48        trou = random.randrange(4)
49        enonce[trou] = "\\ldots"
50        solution[trou] = "\\mathbf{%s}" % solution[trou]
51        if cas:
52            solution.insert(2, c)
53            solution.insert(1, c)
54        else:
55            solution.insert(4, c)
56            solution.insert(3, c)
57        exo.append("\\item $\\dfrac{%s}{%s}=\\dfrac{%s}{%s}$" %
58                   tuple(enonce))
59        if cas:
60            cor.append("\\item $\\dfrac{%s_{(\\times %s)}}{%s_{(\\times %s)}}=\\dfrac{%s}{%s}$" %
61                       tuple(solution))
62        else:
63            cor.append("\\item $\\dfrac{%s}{%s}=\\dfrac{%s_{(\\times %s)}}{%s_{(\\times %s)}}$" %
64                       tuple(solution))
65    exo.extend([\\end{enumerate}", "\end{multicols}\n"])
66    cor.extend([\\end{enumerate}", "\end{multicols}\n"])
67    return (exo, cor)
68
69fractions_egales.description = _(u'Fractions égales')
70
71
72def valeurs_somme():
73    """Travail sur les sommes de fractions en cinquième"""
74    l = []
75
76    for dummy in range(2):
77        op = "+-"[random.randrange(2)]
78        n2, d2 = random.randrange(1, 11), random.randrange(2, 11)
79        if op == "-" and 1 - n2 / d2 > 0:
80            l.append(('1 %s Fraction(%s, %s)') % (op, n2, d2))
81        else:
82            l.append(('Fraction(%s, %s) %s 1') % (n2, d2, op))
83
84    for dummy in range(2):
85        op = "+-"[random.randrange(2)]
86        n1 = random.randrange(2, 11)
87        n2, d2 = random.randrange(1, 11), random.randrange(2, 11)
88        if op == "-" and n1 - n2 / d2 > 0:
89            l.append(('%s %s Fraction(%s, %s)') % (n1, op, n2, d2))
90        else:
91            l.append(('Fraction(%s, %s) %s %s') % (n2, d2, op, n1))
92
93    op = "+-"[random.randrange(2)]
94    n1 = random.randrange(1, 11)
95    n2, d2 = random.randrange(1, 11), random.randrange(2, 11)
96    if op == "-" and n1 - n2 > 0:
97        l.append(('Fraction(%s, %s) %s Fraction(%s, %s)') % (n1, d2, op, n2, d2))
98    else:
99        l.append(('Fraction(%s, %s) %s Fraction(%s, %s)') % (n2, d2, op, n1, d2))
100
101    for dummy in range(3):
102        op = "+-"[random.randrange(2)]
103        n1, d1 = random.randrange(1, 11), random.randrange(2, 11)
104        n2, d2 = random.randrange(1, 11), random.randrange(2, 11) * d1
105        if op == "-" and n1 / d1 - n2 / d2 > 0:
106            l.append(('Fraction(%s, %s) %s Fraction(%s, %s)') % (n1, d1, op, n2, d2))
107        else:
108            l.append(('Fraction(%s, %s) %s Fraction(%s, %s)') % (n2, d2, op, n1, d1))
109
110    random.shuffle(l)
111    return l
112
113
114def sommes_fractions():
115    exo = ["\\exercice", 
116           _(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)."),
117           "\\begin{multicols}{4}", \\begin{enumerate}"]
118    cor = ["\\exercice*", 
119           _(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)."),
120           "\\begin{multicols}{4}", \\begin{enumerate}"]
121    lexo = valeurs_somme()
122    for question in lexo:
123        solve = [question]
124        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
125        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
126        solve = priorites(question)
127        solve = texify(solve)
128        for e in solve:
129            cor.append("\\[\\thenocalcul = " + e + "\\]")
130        exo.append("\\stepcounter{nocalcul}")
131        cor.append("\\stepcounter{nocalcul}")
132    exo.extend([\\end{enumerate}", "\\end{multicols}"])
133    cor.extend([\\end{enumerate}", "\\end{multicols}"])
134    return (exo, cor)
135
136sommes_fractions.description = _(u'Sommes de fractions')
137
138
139def valeurs_produit():
140    l = []
141
142    for dummy in range(4):
143        n1 = d1 = n2 = d2 = a = b = 2
144        while Arithmetique.pgcd(a, b) > 1:
145            a = random.randrange(1, 11)
146            b = random.randrange(2, 11)
147        while Arithmetique.pgcd(n1 * a, d1 * b) > 1:
148            n1 = random.randrange(1, 11)
149            d1 = random.randrange(2, 11)
150        while Arithmetique.pgcd(n2 * b, d2 * a) > 1:
151            n2 = random.randrange(1, 11)
152            d2 = random.randrange(2, 11)
153
154        l.append('Fraction(%s, %s)*Fraction(%s,%s)' % (n1 * a, d1 * b, n2 * b, d2 * a))
155
156    return l
157
158def produits_fractions():
159    exo = ["\\exercice",
160           _(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)."),
161           "\\begin{multicols}{4}", \\begin{enumerate}"]
162    cor = ["\\exercice*",
163           _(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)."),
164           "\\begin{multicols}{4}", \\begin{enumerate}"]
165    lexo = valeurs_produit()
166    for question in lexo:
167        solve = [question]
168        exo.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
169        cor.append("\\item $\\thenocalcul = " + texify(solve)[0] + "$")
170        solve = priorites(question)
171        solve = texify(solve)
172        for e in solve:
173            cor.append("\\[\\thenocalcul = " + e + "\\]")
174        exo.append("\\stepcounter{nocalcul}")
175        cor.append("\\stepcounter{nocalcul}")
176    exo.extend([\\end{enumerate}", "\\end{multicols}"])
177    cor.extend([\\end{enumerate}", "\\end{multicols}"])
178
179    return (exo, cor)
180
181produits_fractions.description = _(u'Produits de fractions')
Note: See TracBrowser for help on using the repository browser.