Advertisement
Sawy3R11

LAB2_SiWP_v1

Mar 13th, 2019
1,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.85 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.org
  2. // See the 'F# Tutorial' project for more help.
  3. type ulam = int * int
  4. exception DzieleniePrzezZero
  5.  
  6. let ( ++ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a*d+b*c, b*d)
  7. let ( -- ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else ( a*d - b*c, b*d )
  8. let ( ** ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a*c, b*d)
  9. let ( /./ ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a, b) ** (d, c)
  10. let ( == ) (a, b) (c, d) = if b=0 || d=0 then raise DzieleniePrzezZero else (a*d = b*c)
  11.  
  12. let rec NWD = function
  13.     | (0, n) -> n
  14.     | (m, n) -> NWD( n%m, m)
  15.  
  16. let skroc (l, m) =
  17.     let znak = if l*m<0 then -1 else 1
  18.     let al = abs l
  19.     let am = abs m
  20.     let d = NWD(al, am)
  21.     in (znak * (al / d), am / d)
  22. let naString (l, m) =
  23.     let znak = if l*m<0 then "-" else ""
  24.     let al = abs l
  25.     let am = abs m
  26.     let d = NWD(al, am)
  27.     in znak + (System.Convert.ToString(al / d))
  28.             + "/" + (System.Convert.ToString(am / d))
  29.  
  30. type samochod = {marka: string; rocznik: int; pojemnosc: float}
  31. let maloLitrazowy (x: samochod) = x.pojemnosc < 900.0;
  32. type osoba = { imie: string; urodzony: int; adres: string}
  33. let starszy(k1: osoba, k2: osoba) = k1.urodzony > k2.urodzony;
  34. type rej = {pojazd: samochod; posiadacz: osoba }
  35. let wiekszapojemnosc (s1: rej, s2: rej) =
  36.     s1.pojazd.pojemnosc > s2.pojazd.pojemnosc
  37.  
  38. type ulamek = { licznik: int; mianownik: int }
  39.  
  40. //let ( ++ ) (u1:ulamek) (u2:ulamek) = if u1.mianownik=0 || u2.mianownik=0 then raise DzieleniePrzezZero else (u1.licznik*u2.mianownik+bu1.mianownik*u2.licznik, u1.mianownik*u2.mianownik)
  41.  
  42.  
  43. [<EntryPoint>]
  44. let main argv =
  45.     printfn "%A" argv
  46.     printfn "%f" (1./2. + 2./3. * 3./4.)
  47.     let wynik1 = (1, 2) ++ (2, 3) ** (3, 4)
  48.  
  49.     printfn "%A" (skroc wynik1)
  50.     printfn "%s" (naString wynik1)
  51.  
  52.     //testy
  53.     let q1 = (-2, 3)
  54.     let q2 = (5, -10)
  55.  
  56.     let q3 = q1 ++ q2
  57.     printfn "q1 ++ q2 = %A\n" q3
  58.     let q4 = q1 -- q2
  59.     printfn "q1 -- q2 = %A \n" q4
  60.     let q5 = q1 ** q2
  61.     printfn "q1 ** q2 = %A \n" q5
  62.     let q6 = q2 /./ q3
  63.  
  64.     //rekordy----------
  65.     let siena = {marka = "FIAT"; rocznik=1997; pojemnosc=1586.0 }
  66.     let maluch = {marka= "FIAT"; rocznik=1987; pojemnosc= 648.0 }
  67.     printfn "siena: %b" (maloLitrazowy siena)
  68.  
  69.     let kier1 = { imie="Pawel B"; adres="Niemcy"; urodzony= 966 }
  70.     let kier2 = { imie="Zygmunt"; adres="Polska"; urodzony = 1450 }
  71.     printfn "k1 starszy od k2: %b" ( starszy (kier1, kier2) )
  72.  
  73.     let sam1:rej = { pojazd= siena; posiadacz=kier1}
  74.     let sam1:rej = { pojazd=maluch; posiadacz=kier2}
  75.  
  76.     let ulamek1 = {licznik= 1; mianownik=10}
  77.     let ulamek2 = {licznik=3; mianownik=20}
  78.     //printfn "ulamek1 ++ ulamek2 = %A" (ulamek1 + ulamek2)
  79.  
  80.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement