Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.org
- // See the 'F# Tutorial' project for more help.
- type ulamek = {licznik: int; mianownik: int}
- exception DzieleniePrzezZero
- let rec NWD = function
- | (0, n) -> n
- | (m, n) -> NWD(n % m, m)
- let skroc (q: ulamek) =
- let znak = if q.licznik * q.mianownik < 0 then -1 else 1
- let al = abs q.licznik
- let am = abs q.mianownik
- let d = NWD(al, am)
- in {licznik = znak * (al / d); mianownik = am / d}
- let ( ++ ) (q1: ulamek) (q2: ulamek) =
- if q1.mianownik = 0 || q2.mianownik = 0 then raise DzieleniePrzezZero
- else skroc <| {licznik = q1.licznik * q2.mianownik + q1.mianownik * q2.licznik; mianownik = q1.mianownik * q2.mianownik}
- let ( -- ) (q1: ulamek) (q2: ulamek) =
- if q1.mianownik = 0 || q2.mianownik = 0 then raise DzieleniePrzezZero
- else skroc <| {licznik = q1.licznik * q2.mianownik - q1.mianownik * q2.licznik; mianownik = q1.mianownik * q2.mianownik}
- let ( ** ) (q1: ulamek) (q2: ulamek) =
- if q1.mianownik = 0 || q2.mianownik = 0 then raise DzieleniePrzezZero
- else skroc <| {licznik = q1.licznik * q2.licznik; mianownik = q1.mianownik * q2.mianownik}
- let ( /./ ) (q1: ulamek) (q2: ulamek) =
- if q1.mianownik = 0 || q2.mianownik = 0 then raise DzieleniePrzezZero
- else skroc <| {licznik = q1.licznik; mianownik = q1.mianownik} ** {licznik = q2.mianownik; mianownik = q2.licznik}
- let ( == ) (q1: ulamek) (q2: ulamek) =
- match q1.mianownik, q2.mianownik with
- | (0, _) -> raise DzieleniePrzezZero
- | (_, 0) -> raise DzieleniePrzezZero
- | _ -> (q1.licznik * q2.mianownik = q2.licznik * q1.mianownik)
- (*
- let skroc (l, m) =
- let znak = if l * m < 0 then -1 else 1
- let al = abs l
- let am = abs m
- let d = NWD(al, am)
- in (znak * (al / d), am / d)
- let naString (l, m) =
- let znak = if l * m < 0 then "-" else ""
- let al = abs l
- let am = abs m
- let d = NWD(al, am)
- in znak + (System.Convert.ToString(al / d))
- + "/" + (System.Convert.ToString(am / d))
- *)
- let naString (q: ulamek) =
- let znak = if q.licznik * q.mianownik < 0 then "-" else ""
- let al = abs q.licznik
- let am = abs q.mianownik
- let d = NWD(al, am)
- in znak + (System.Convert.ToString(al / d))
- + "/" + (System.Convert.ToString(am / d))
- [<EntryPoint>]
- let main argv =
- let q1 = {mianownik = 3; licznik = 4}
- let q2 = {mianownik = 3; licznik = 2}
- printfn "%A" <| q1 ++ q2
- printfn "%A" <| q1 ** q2
- printfn "%A" <| q1 -- q2
- printfn "%A" <| q2 /./ q1
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement