Advertisement
Guest User

Untitled

a guest
Mar 13th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.65 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.org
  2. // See the 'F# Tutorial' project for more help.
  3.  
  4. type ulam = int * int
  5.  
  6. exception DzieleniePrzezZero
  7.  
  8. let ( ++ ) (a, b) (c, d) =
  9.     if b = 0 || d = 0 then raise DzieleniePrzezZero
  10.         else  (a * d + b * c, b * d)
  11. let ( -- ) (a, b) (c, d) =
  12.     if b = 0 || d = 0 then raise DzieleniePrzezZero
  13.         else  (a * d - b * c, b * d)
  14. let ( ** ) (a, b) (c, d) =
  15.     if b = 0 || d = 0 then raise DzieleniePrzezZero
  16.         else  (a * c, b * d)
  17. let ( /./ ) (a, b) (c, d) =
  18.     if b = 0 || d = 0 then raise DzieleniePrzezZero
  19.         else  (a, b) ** (d, c)
  20. let ( == ) (a, b) (c, d) =
  21.     match b, d with
  22.     | (0, _) -> raise DzieleniePrzezZero
  23.     | (_, 0) -> raise DzieleniePrzezZero
  24.     | _ -> (a * d = b * c)
  25.  
  26. let rec NWD = function
  27.     | (0, n) -> n
  28.     | (m, n) -> NWD(n % m, m)
  29.  
  30. let skroc (l, m) =
  31.     let znak = if l * m < 0 then -1 else 1
  32.     let al = abs l
  33.     let am = abs m
  34.     let d = NWD(al, am)
  35.     in (znak * (al / d), am / d)
  36.  
  37. let naString (l, m) =
  38.     let znak = if l * m < 0 then "-" else ""
  39.     let al = abs l
  40.     let am = abs m
  41.     let d = NWD(al, am)
  42.     in znak + (System.Convert.ToString(al / d))
  43.             + "/" + (System.Convert.ToString(am / d))
  44.  
  45. type samochod = {marka: string; rocznik: int; pojemnosc: float}
  46.  
  47. let malolitrazowy(x: samochod) =
  48.     x.pojemnosc < 900.0
  49.  
  50. type osoba = {imie: string; urodzony: int; adres: string}
  51.  
  52. let starszy (k1: osoba, k2: osoba) =
  53.     k1.urodzony < k2.urodzony
  54.  
  55. type rej = {pojazd: samochod; kierowca: osoba}
  56.  
  57. let wiekszaPojemnosc (s1: rej, s2: rej) =
  58.     s1.pojazd.pojemnosc > s2.pojazd.pojemnosc
  59.  
  60. type ulamek = {licznik: int; mianownik: int}
  61.  
  62.  
  63.  
  64. [<EntryPoint>]
  65. let main argv =
  66.     let q1 = (-2, 3)
  67.     let q2 = (5, -10)
  68.     let q3 = q1 ++ q2
  69.     printfn "%A" <| q3
  70.     printfn "%A" <| q1 -- q2
  71.     let q4 = q2 ** q3
  72.     printfn "%A" <| q4
  73.     let q5 = q4 /./ q3
  74.     printfn "%A" <| q5
  75.     printfn "%b" <| (q1 == q2)
  76.     printfn "%s" <| naString q4
  77.     printfn "%s" <| naString q5
  78.  
  79.     (* rekordy *)
  80.  
  81.     let siena = {marka = "FIAT"; rocznik = 1987; pojemnosc = 1586.0}
  82.     let maluch = {marka = "MALUCH"; rocznik = 1987; pojemnosc = 648.0}
  83.  
  84.     printfn "%b" <| malolitrazowy maluch
  85.  
  86.     let kier1 = {imie = "Maciek"; adres = "Dębica"; urodzony = 1996}
  87.     let kier2 = {imie = "Dawid"; adres = "Nieznany"; urodzony = 1996}
  88.  
  89.     printfn "%b" <| starszy (kier2, kier1)
  90.  
  91.     let rej1 = {pojazd = siena; kierowca = kier1}
  92.     let rej2 = {pojazd = maluch; kierowca = kier2}
  93.  
  94.     printfn "%A" <| wiekszaPojemnosc (rej1, rej2)
  95.  
  96.     printfn "%A" <| (5, 0) /./ (1, 2)
  97.  
  98.  
  99.     0 // return an integer exit cobe
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement