source: pyromaths/trunk/fuentes/src/pyromaths/ex/troisiemes/proportionnalite.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

File size: 5.5 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# Pyromaths
4# Un programme en Python qui permet de créer des fiches d'exercices types de
5# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
6# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21#
22from random import randint, shuffle, randrange
23from pyromaths.outils.decimaux import decimaux
24# from pyromaths.outils.Geometrie import cotation, cotation_h
25
26def choix_valeurs(min_prct, max_prct, min_nbre, max_nbre):
27
28    while 1:
29        decomp100 = [2, 2, 5, 5, 1, 1]
30        shuffle(decomp100)
31        prct = decomp100[0] * decomp100[1] * decomp100[2]  # qui donne 2, 4, 5, 10, 20, 25 ou 50
32        tot = decomp100[3] * decomp100[4] * decomp100[5]
33        if (max_prct / prct != 0) and (max_nbre / tot != 0):
34            break
35    prct = randint(max(min_prct / prct, 1), (max_prct / prct)) * prct
36    tot = tot * randint(max(min_nbre / tot, 1) , (max_nbre / tot))
37    return prct, tot
38   
39def proportionnalite_3eme():
40    # choix exercice
41    i = randrange(2)
42    # choix valeurs
43    #===========================================================================
44    # [min_prct, max_prct, min_nbre, max_nbre] = [[40, 80, 40, 65],
45    #                                             [40, 80, 65, 90]][i]
46    #===========================================================================
47    # choisit les valeurs du groupe A
48    # prctA : pourcentage d'individu dans le groupe A entre 40% et 80%
49    # totA : nombre total du groupe A entre 40 et 70
50    prctA, totA = choix_valeurs(min_prct=40, max_prct=80, min_nbre=40, max_nbre=65)
51
52    # On choisit B avec des valeurs différentes
53    while 1:
54        prctB, totB = choix_valeurs(min_prct=40, max_prct=80, min_nbre=40, max_nbre=65)
55        if prctA != prctB and totB != totA:
56            break
57       
58    Total = totA + totB
59
60    # calcul
61    nbA = (prctA * totA / 100)
62    nbB = (prctB * totB / 100)
63    nbTotal = ((nbA + nbB))
64    prct_final = (100.0 * nbTotal / Total)
65    prct_final_arrondi = round(100.0 * nbTotal / Total, 1)
66    if prct_final == prct_final_arrondi:
67        approx = "="
68    else:
69        approx = "\\approx"
70   
71    # La situation
72    texte = [u"Lors d'un voyage scolaire, les élèves sont répartis dans deux bus :",
73             u"Au collège Dubois, il y a $%s$ élèves en quatrièmes et $%s$ élèves en troisièmes." % (totA, totB)][i]
74
75    # Les deux groupes
76    ligne1 = [u"\\item Bus A : %s élèves dont %s %s de garçons." % (totA, prctA, "\\%"),
77              u"\\item $%s$ %s des élèves de quatrièmes possèdent un ordinateur ;" % (prctA, "\\%")][i]
78    ligne2 = [u"\\item Bus A : %s élèves dont %s %s de garçons." % (totB, prctB, "\\%"),
79              u"\\item $%s$ %s des élèves de troisièmes possèdent un ordinateur ;" % (prctB, "\\%")][i]
80
81    # La question
82    question = [u"Quel est, sur l'ensemble des deux bus, le pourcentage de garçons ?\\par",
83                u"Quel est le pourcentage des élèves qui possèdent un ordinateur ?\\par"][i]
84
85    # La correction
86    correction = [  # Dans le bus
87        [u"Dans le bus A, il y a $\\cfrac{%s \\times %s}{100} = %s$ garçons.\\par" % (prctA, totA, decimaux(nbA)),
88           u"Dans le bus B, il y a $\\cfrac{%s \\times %s}{100} = %s$ garçons.\\par" % (prctB, totB, decimaux(nbB)),
89           u"On en déduit qu'il y a $%s + %s = %s$ garçons sur un total de $%s + %s = %s $ élèves.\\par"
90                   % (decimaux(nbA), decimaux(nbB), nbTotal, totA, totB, Total),
91            u" Le pourcentage de garçons sur l'ensemble des deux bus est donc de $\\cfrac{%s}{%s}\\times 100 %s %s%s$"
92                  % (nbTotal, Total, approx, decimaux(prct_final_arrondi), "\,\\%")],
93        # À l'ordinateurs
94                 [u"En quatrièmes, $\\cfrac{%s \\times %s}{100} = %s$ élèves possèdent un ordinateur.\\par" % (prctA, totA, decimaux(nbA)),
95                  u"En troisièmes, $\\cfrac{%s \\times %s}{100} = %s$ élèves possèdent un ordinateur.\\par" % (prctB, totB, decimaux(nbB)),
96                  u"On en déduit qu'il y a $%s + %s = %s$ élèves qui possèdent un ordinateur sur un total de $%s + %s = %s $ élèves.\\par"
97                   % (decimaux(nbA), decimaux(nbB), nbTotal, totA, totB, Total),
98                   u" Le pourcentage d'élèves possédant un ordinateur est donc de $\\cfrac{%s}{%s}\\times 100 %s %s%s$"
99                  % (nbTotal, Total, approx, decimaux(prct_final_arrondi), "\,\\%")],
100                   ][i]
101    exo = ["\\exercice",
102           texte,
103           "\\begin{itemize}",
104           ligne1,
105           ligne2,
106           "\\end{itemize}",
107           question,
108           ]
109       
110    cor = ["\\exercice*",
111           texte,
112           "\\begin{itemize}",
113           ligne1,
114           ligne2,
115           "\\end{itemize}",
116           question,
117           "\\dotfill\\par"
118           ] + correction
119   
120   
121    return (exo, cor)
Note: See TracBrowser for help on using the repository browser.