source: pyromaths/trunk/fuentes/src/pyromaths/ex/sixiemes/arrondi.py @ 1780

Last change on this file since 1780 was 1780, checked in by Juanma, 3 years ago

wip i18n

File size: 4.1 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#
23from random import randint, shuffle
24import textwrap
25
26from pyromaths import ex
27from pyromaths.outils.Affichage import decimaux
28
29precision = [_(u'au millième'), _(u'au centième'), _(u'au dixième'), _(u'à l\'unité'),
30             _(u'à la dizaine'), _(u'à la centaine'), _(u'au millier'),
31            _(u'à la dizaine de milliers')]
32
33supinf = ['', _(u' par défaut'), _(u' par excès')]
34
35class ArrondirNombreDecimal(ex.TexExercise):
36    """ Exercice d'arrondis avec les encadrements. """
37
38    description = _(u'Arrondir des nombres décimaux')
39
40    def __init__(self):
41        hasard = [valide_hasard() for dummy in range(4)]
42        choix = [(i, j) for i in range(7)  for j in range(3)]
43        shuffle(choix)
44        self.choix_precision = [choix[i][0] for i in range(4)]
45        self.choix_supinf = [choix[i][1] for i in range(4)]
46    # FIXME
47        # Arrondir n'est pas synonyme de valeur approchée
48        # Valeur approchée par excès
49        # Valeur approchée par défaut
50        # Arrondi = la « meilleure » valeur approchée
51        # et ne paraît employé ici correctement
52        self.nombres = [(hasard[0]) / (10 ** (-self.choix_precision[0] + 4)),
53                (hasard[1]) / (10 ** (-self.choix_precision[1] + 4)),
54                (hasard[2]) / (10 ** (-self.choix_precision[2] + 4)),
55                (hasard[3]) / (10 ** (-self.choix_precision[3] + 4))]
56
57    def tex_statement(self):
58        exo = ["\\exercice", '\\begin{enumerate}']
59        for k in range(4):
60            exo.append(_(u"\\item Arrondir ") + decimaux(self.nombres[k]) + " " + 
61                    precision[self.choix_precision[k]] + supinf[self.choix_supinf[k]] + 
62                    '.')
63        exo.append("\\end{enumerate}")
64        return exo
65
66    def tex_answer(self):
67        cor = ["\\exercice*", '\\begin{enumerate}']
68        for k in range(4):
69            arrondi = round(self.nombres[k], -self.choix_precision[k] + 3)
70            if (arrondi > self.nombres[k]):
71                defaut = arrondi - 10 ** (self.choix_precision[k] - 3)
72                exc = arrondi
73            if (arrondi <= self.nombres[k]):
74                defaut = arrondi
75                exc = arrondi + 10 ** (self.choix_precision[k] - 3)
76            if (self.choix_supinf[k] == 0):
77                solution = arrondi
78            elif (self.choix_supinf[k] == 1):
79                solution = defaut
80            elif (self.choix_supinf[k] == 2):
81                solution = exc
82            cor.append(_(u'\\item L\'encadrement de ') + decimaux(self.nombres[k])+ ' ' + 
83                    precision[self.choix_precision[k]] + _(u' est :\\par'))
84            cor.append(decimaux(defaut) + ' < ' + decimaux(self.nombres[k]) + ' < ' + 
85                    decimaux(exc) + '\\par')
86        cor.append( _(u'On en déduit que son arrondi ') +
87                    precision[self.choix_precision[k]] + ' ' + supinf[self.choix_supinf[k]] + 
88                    _(u' est : ') + decimaux(solution) + '.')
89        cor.append("\\end{enumerate}")
90        return cor
91
92def valide_hasard():
93    """renvoie un nombre float non multiple de 10000"""
94    nbre, unite = randint(1000, 100000), randint(1, 9)
95    return float(nbre) * 10 + unite
Note: See TracBrowser for help on using the repository browser.