def tex_den_com1(a, sgn): # renvoie l'ecriture au format tex de la somme des fractions au meme denominateur if not isinstance(a, tuple): # les deux fractions ont deja le meme denominateur return "" else: (sgn1, sgn2) = (signe(a[0][1]), signe(a[1][1])) b = (a[0][0] * sgn1, a[0][1] * sgn1, sgn, a[1][0] * sgn2, a[1][1] * sgn2) return "\dfrac{%s}{%s}%s\\dfrac{%s}{%s}" % b
def decomp_prod(a, b): #renvoie un tuple contenant les deux fractions apres simplification et un tuple contenant les nb par lesquels on simplifie le produit de fractions c = pgcd(a[0], b[1]) d = pgcd(a[1], b[0]) sgn1 = signe(a[1]) sgn2 = signe(b[1]) if c == d == 1: return (((sgn1 * a[0]) // c, (sgn1 * a[1]) // d), ((sgn2 * b[0]) // d, (sgn2 * b[1]) // c), '') else: return (((sgn1 * a[0]) // c, (sgn1 * a[1]) // d), ((sgn2 * b[0]) // d, (sgn2 * b[1]) // c), (c, d))
def tex_den_com0(a, b, c, sgn): # renvoie l'ecriture au format tex de la mise au meme denominateur des fraction a et b if not isinstance(c, tuple): # les deux fractions ont deja le meme denominateur return "" else: (sgn1, sgn2) = (signe(a[1]), signe(b[1])) if c[0] == 1: if c[1] == 1: d = (a[0] * sgn1, a[1] * sgn1, b[0] * sgn2, b[1] * sgn2) return "" else: d = (a[0] * sgn1, a[1] * sgn1, sgn, b[0] * sgn2, c[1], b[1] * sgn2, c[1]) return "\dfrac{%s}{%s}%s\\dfrac{%s_{\\times %s}}{%s_{\\times %s}}" % d elif c[1] == 1: d = (a[0] * sgn1, c[0], a[1] * sgn1, c[0], sgn, b[0] * sgn2, b[1] * sgn2) return "\dfrac{%s_{\\times %s}}{%s_{\\times %s}}%s\\dfrac{%s}{%s}" % d else: d = (a[0] * sgn1, c[0], a[1] * sgn1, c[0], sgn, b[0] * sgn2, c[1], b[1] * sgn2, c[1]) return "\dfrac{%s_{\\times %s}}{%s_{\\times %s}}%s\\dfrac{%s_{\\times %s}}{%s_{\\times %s}}" % d
def produit(a, b): #renvoie un tuple contenant le produit des fractions a et b sgn1 = signe(a[1] * b[1]) return ((sgn1 * a[0]) * b[0], (sgn1 * a[1]) * b[1])
def tex_dev1( a, bplus=0, bpar=0, bpn=0 ): # renvoi le developpement (a)²+2*a*b+(b)², (a)²-2*a*b+(b)², (a)²-(b)² ou a*c+a*d+b*c+b*d # a est de la forme ((3, 2)(3, 2)) pour (3x+2)(3x+2) (ca, cb, cc, cd) = (a[0][0], a[0][1], a[1][0], a[1][1]) # coefficients a, b, c et d if a[0] == a[1]: # (a+b)² ou (a-b)² if signe(ca) == signe(cb): # (a+b)² (ca, cb) = (abs(ca), abs(cb)) texte = "%s^2+2\\times %s\\times %s+%s^2" % ( tex_coef(ca, "x", bpc=1), tex_coef(ca, "x", bpn=1), tex_coef(cb, "", bpn=1), tex_coef(cb, "", bpn=1, bpc=1), ) if bpar: return "(" + texte + ")" else: return texte else: # (a-b)² (ca, cb) = (abs(ca), abs(cb)) texte = "%s^2-2\\times %s\\times %s+%s^2" % ( tex_coef(ca, "x", bpc=1), tex_coef(ca, "x", bpn=1), tex_coef(cb, "", bpn=1), tex_coef(cb, "", bpn=1, bpc=1), ) if bpar: return "(" + texte + ")" else: return texte if abs(ca) == abs(cc) and abs(cb) == abs(cd): # (a+b)(a-b) ou (a+b)(-a+b) if ca == cc: # (a+b)(a-b) texte = "%s^2-%s^2" % (tex_coef(ca, "x", bpc=1), tex_coef(abs(cb), "")) if bpar: return "(" + texte + ")" else: return texte else: # (a+b)(-a+b) texte = "%s^2-%s^2" % (tex_coef(cb, "", bpn=1), tex_coef(abs(ca), "x", bpc=1)) if bpar: return "(" + texte + ")" else: return texte else: # (a+b)(c+d) if cc == 0 and cd == 1: texte = "%s%s" % (tex_coef(ca, "x", bplus=bplus), tex_coef(cb, "", bplus=ca != 0)) if bpar: return "(" + texte + ")" else: return texte elif ca == 0 or cb == 0 or cc == 0 or cd == 0: if ca == 0: texte = "%s\\times %s+%s\\times %s" % ( tex_coef(cb, "", bpn=bpn), tex_coef(cc, "x", bpn=1), tex_coef(cb, "", bpn=1), tex_coef(cd, "", bpn=1), ) elif cb == 0: texte = "%s\\times %s+%s\\times %s" % ( tex_coef(ca, "x", bpn=bpn), tex_coef(cc, "x", bpn=1), tex_coef(ca, "x", bpn=1), tex_coef(cd, "", bpn=1), ) elif cc == 0: texte = "%s\\times %s+%s\\times %s" % ( tex_coef(cd, "", bpn=bpn), tex_coef(ca, "x", bpn=1), tex_coef(cd, "", bpn=1), tex_coef(cb, "", bpn=1), ) else: texte = "%s\\times %s+%s\\times %s" % ( tex_coef(cc, "x", bpn=bpn), tex_coef(ca, "x", bpn=1), tex_coef(cc, "x", bpn=1), tex_coef(cb, "", bpn=1), ) return texte else: texte = "%s+%s+%s+%s" % ( tex_coef(ca * cc, "x^2", bpn=bpn), tex_coef(ca * cd, "x", bpn=1), tex_coef(cb * cc, "x", bpn=1), tex_coef(cb * cd, "", bpn=1), ) if bpar: return "(" + texte + ")" else: return texte
def inverse(a): # renvoie l'inverse de la fraction a sgn1 = signe(a[0]) return (sgn1 * a[1], sgn1 * a[0])
def den_com1(a, b): # renvoie un tuple contenant les fractions a et b avec le meme denominateur c = den_com0(a, b) sgn1 = signe(a[1]) sgn2 = signe(b[1]) return (((a[0] * c[0]) * sgn1, (a[1] * c[0]) * sgn1), ((b[0] * c[1]) * sgn2, (b[1] * c[1]) * sgn2))