source: pyromaths/trunk/fuentes/src/pyromaths/outils/Fractions.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: 3.5 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
24from pyromaths.classes.Fractions import Fraction
25from . import Arithmetique, Affichage
26import random
27import math
28
29
30#===============================================================================
31# Gère le calcul fractionnaire
32#===============================================================================
33
34
35def EffectueSommeFractions(fr1, fr2, s, pre, post):
36    if s == "+":
37        fr = fr1 + fr2
38    else:
39        fr = fr1 - fr2
40    cor = []
41    if fr1.n and fr2.n:
42        ppcm = Arithmetique.ppcm(fr2.d, fr1.d)
43        if abs(fr1.d) - abs(fr2.d):
44            cor.append("%s%s%s%s%s" % (pre, Fractions.TeX(fr1, True,
45                       coef=ppcm // abs(fr1.d)), s, Fractions.TeX(fr2,
46                       True, coef=ppcm // abs(fr2.d)), post))
47        if pre.rstrip().endswith('(') and post.lstrip().startswith(')'):
48            pre = pre.rstrip()[:len(pre.rstrip()) - 1]
49            post = post.lstrip()[1:]
50        cor.append("%s%s%s" % (pre, Fractions.TeX(fr, True), post))
51        if fr.n:
52            frs = Fractions.simplifie(fr)
53            if abs(frs.n) != abs(fr.n):
54                cor.append("%s%s%s" % (pre, Fractions.TeX(frs, True,
55                           coef=fr.d // frs.d), post))
56                cor.append("%s%s%s" % (pre, Fractions.TeX(frs, True),
57                           post))
58    else:
59        cor.append("%s%s%s" % (pre, Fractions.TeX(fr, True), post))
60    return cor
61
62
63def EffectueProduitFractions(fr1, fr2, pre, post):
64    fr1s = Fractions.simplifie(fr1)
65    fr2s = Fractions.simplifie(fr2)
66    cor = []
67    if fr1.n and fr2.n:
68        if abs(fr1s.d) < abs(fr1.d) or abs(fr2s.d) < abs(fr2.d):
69            cor.append("%s%s \\times %s%s" % (pre, Fractions.TeXSimplifie(fr1),
70                       Fractions.TeXSimplifie(fr2), post))
71            cor.append("%s%s \\times %s%s" % (pre, Fractions.TeX(fr1s,
72                       True), Fractions.TeX(fr2s, True), post))
73        fr = fr1s * fr2s
74        frs = Fractions.simplifie(fr)
75        if abs(frs.d - fr.d):
76            cor.append("%s%s%s" % (pre, Fractions.TeXProduit(fr1s, fr2s),
77                       post))
78        cor.append("%s%s%s" % (pre, Fractions.TeX(frs, True), post))
79    else:
80        cor.append("%s%s%s" % (pre, Fractions.TeX(Fractions(0), True),
81                   post))
82    return cor
83
84
85def EffectueQuotientFractions(fr1, fr2, pre, post):
86    fr2 = Fractions(1, 1) / fr2
87    cor = ["%s%s \\times %s%s" % (pre, Fractions.TeX(fr1, True),
88           Fractions.TeX(fr2, True), post)]
89    cor.extend(EffectueProduitFractions(fr1, fr2, pre, post))
90    return cor
91
Note: See TracBrowser for help on using the repository browser.