Code source du site TeacherCorner.lamdera.app, contenant une suite d'outils permettant d'automatiser la production de documents pédagogiques.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
TeacherCorner/src/Fractions.elm

58 lines
1.4 KiB

module Fractions exposing (..)
import Arithmetic exposing (gcd)
type alias Frac = { num : Int, den : Int }
simplifier a =
let
pgcd = gcd a.num a.den
sgnDuDen =
if a.den < 0 then -1 else 1
in
Frac (sgnDuDen*a.num // pgcd) (sgnDuDen*a.den // pgcd)
--{ a | num = a.num // pgcd, den = a.den // pgcd }
estEntier a = .den (simplifier a) == 1
add a b =
simplifier <| Frac (a.num*b.den + a.den*b.num) (a.den*b.den)
neg a = simplifier <| Frac (-a.num) a.den
sub a b = simplifier <| add a (neg b)
mul a b = simplifier <| Frac (a.num*b.num) (a.den*b.den)
inv a = simplifier <| Frac a.den a.num
div a b = simplifier <| mul a (inv b)
exp : Frac -> Frac -> Maybe Frac
exp a b =
let
aa = simplifier a
bb = simplifier b
sgnDeA =
if aa.num < 0 then -1 else 1
sgnDeB =
if bb.num < 0 then -1 else 1
in
if bb.den == 1 && bb.num < 0 then
Just <| Frac ((sgnDeA*aa.den)^(sgnDeB*bb.num)) ((sgnDeA*aa.num)^(sgnDeB*bb.num))
else if bb.den == 1 then
Just <| Frac (aa.num^bb.num) (aa.den^bb.num)
else
Nothing
-- À utiliser sur une fraction simplifier !
teX a
= case a.den of
1 -> String.fromInt a.num
_ ->
if a.num < 0 then
"-\\frac{" ++ String.fromInt (-a.num) ++ "}{" ++ String.fromInt a.den ++ "}"
else
"\\frac{" ++ String.fromInt a.num ++ "}{" ++ String.fromInt a.den ++ "}"
raw a = "(" ++ String.fromInt a.num ++ "/" ++ String.fromInt a.den ++ ")"