Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.org
- open System
- exception DzieleniePrzezZero of string
- let ( ++ ) (a, b) (c, d) = if b=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else if d=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else (a*d + b*c, b*d)
- let ( -- ) (a, b) (c, d) = if b=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else if d=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else (a*d - b*c, b*d)
- let ( ** ) (a, b) (c, d) = if b=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else if d=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else (a*c, b*d)
- let ( /./ ) (a, b) (c, d) = if b=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else if d=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else (a,b) ** (d,c)
- let ( == ) (a, b) (c, d) = if b=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else if d=0 then raise (DzieleniePrzezZero("Dzielenie przez zero")) else (a*d = b*c)
- let rec NWD = function
- | (0, n) -> n
- | (m, n) -> NWD(n % m, m)
- let skroc (l,m) =
- if m = 0 then raise (DzieleniePrzezZero("Dzielenie prez zero"))
- else
- 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) =
- if m = 0 then raise (DzieleniePrzezZero("Dzielenie prez zero"))
- else
- let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
- let al = abs l (* wart.bezw. = liczba nat. *)
- let am = abs m
- let d = NWD(al, am)
- in znak + (System.Convert.ToString(al / d))
- + "/" + (System.Convert.ToString(am / d))
- let q1 = (-2, 3)
- let q2 = (5, -10)
- let q3 = q1 ++ q2
- let q4 = q2 **q3
- let q5 = q4 /./ q3
- type ulamek (licznik : int, mianownik : int) =
- member this.licznik = licznik
- member this.mianownik = mianownik
- static member skrocUlam(u:ulamek) =
- if u.mianownik = 0 then raise (DzieleniePrzezZero("Dzielenie prez zero"))
- else
- let znak = if u.licznik*u.mianownik<0 then -1 else 1
- let al = abs u.licznik
- let am = abs u.mianownik
- let d = NWD(al,am)
- in (znak * (al / d), am / d)
- static member naString (l, m) =
- if m = 0 then raise (DzieleniePrzezZero("Dzielenie prez zero"))
- else
- let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
- let al = abs l (* wart.bezw. = liczba nat. *)
- let am = abs m
- let d = NWD(al, am)
- let calosci = al/am
- let licznik = al-calosci*am
- in
- if licznik = 0 then
- znak + (System.Convert.ToString(calosci))
- else
- znak + (System.Convert.ToString(calosci)) + " " + (System.Convert.ToString(licznik)) + "/" +
- (System.Convert.ToString(am / d))
- static member (+) (a:ulamek, b:ulamek) =
- if a.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else if b.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else
- ulamek.naString(ulamek.skrocUlam(ulamek(a.licznik * b.mianownik + a.mianownik * b.licznik, a.mianownik * b.mianownik)))
- static member (-) (a:ulamek, b:ulamek) =
- if a.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else if b.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else
- ulamek.skrocUlam(ulamek(a.licznik * b.mianownik - a.mianownik * b.licznik, a.mianownik * b.mianownik))
- static member (*) (a:ulamek, b:ulamek) =
- if a.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else if b.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else
- ulamek.skrocUlam(ulamek(a.licznik * b.licznik, a.mianownik * b.mianownik))
- static member (/) (a:ulamek, b:ulamek) =
- if a.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else if b.mianownik=0 then raise (DzieleniePrzezZero("Dzielenie przez zero"))
- else
- ulamek.naString(ulamek.skrocUlam(ulamek(a.licznik * b.mianownik, a.mianownik * b.licznik)))
- override this.ToString() =
- this.licznik.ToString() + "/" + this.mianownik.ToString()
- let u1 = ulamek(2, 1)
- let u2 = ulamek(7, 4)
- [<EntryPoint>]
- let main argv =
- printfn "Hello World from F#!"
- printf "%A" <| (u1+u2)
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement