Sawy3R11

LAB_SiWP_2

Mar 13th, 2019
206
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. type ulam = int * int
  4. exception DzieleniePrzezZero
  5.  
  6. let rec NWD = function
  7.     | (0, n) -> n
  8.     | (m, n) -> NWD( n%m, m)
  9.  
  10. let skroc (l, m) =
  11.     let znak = if l*m<0 then -1 else 1
  12.     let al = abs l
  13.     let am = abs m
  14.     let d = NWD(al, am)
  15.     in (znak * (al / d), am / d)
  16. let naString (l, m) =
  17.     let znak = if l*m<0 then "-" else ""
  18.     let al = abs l
  19.     let am = abs m
  20.     let d = NWD(al, am)
  21.     let al_s = al / d
  22.     let am_s = am / d
  23.     let c = al_s / am_s
  24.     let al_minus = al_s - c*am_s
  25.     in znak + (System.Convert.ToString( c )) + ":" + (System.Convert.ToString(al_minus))
  26.             + "/" + (System.Convert.ToString(am_s))
  27.  
  28. type samochod = {marka: string; rocznik: int; pojemnosc: float}
  29. let maloLitrazowy (x: samochod) = x.pojemnosc < 900.0;
  30. type osoba = { imie: string; urodzony: int; adres: string}
  31. let starszy(k1: osoba, k2: osoba) = k1.urodzony > k2.urodzony;
  32. type rej = {pojazd: samochod; posiadacz: osoba }
  33. let wiekszapojemnosc (s1: rej, s2: rej) =
  34.     s1.pojazd.pojemnosc > s2.pojazd.pojemnosc
  35.  
  36. type ulamek = { licznik: int; mianownik: int }
  37.  
  38. let rec potega (u1: ulamek) n:int  =
  39.     match n with
  40.     | 0 -> 1
  41.     | _ -> (u1 ** ( u1 ** (n-1))
  42.  
  43. let ( ++ ) (u1:ulamek) (u2:ulamek) = if u1.mianownik=0 || u2.mianownik=0 then raise DzieleniePrzezZero else skroc (u1.licznik*u2.mianownik+u1.mianownik*u2.licznik, u1.mianownik*u2.mianownik)
  44. let ( -- ) (u1:ulamek) (u2:ulamek) = if u1.mianownik=0 || u2.mianownik=0 then raise DzieleniePrzezZero else skroc (u1.licznik*u2.mianownik-u1.mianownik*u2.licznik, u1.mianownik*u2.mianownik)
  45. let ( ** ) (u1:ulamek) (n:int) = potega u1 n
  46.  
  47. [<EntryPoint>]
  48. let main argv =
  49.     printfn "%A" argv
  50.     //rekordy----------
  51.     let siena = {marka = "FIAT"; rocznik=1997; pojemnosc=1586.0 }
  52.     let maluch = {marka= "FIAT"; rocznik=1987; pojemnosc= 648.0 }
  53.     printfn "siena: %b" (maloLitrazowy siena)
  54.  
  55.     let kier1 = { imie="Pawel B"; adres="Niemcy"; urodzony= 966 }
  56.     let kier2 = { imie="Zygmunt"; adres="Polska"; urodzony = 1450 }
  57.     printfn "k1 starszy od k2: %b" ( starszy (kier1, kier2) )
  58.  
  59.     let sam1:rej = { pojazd= siena; posiadacz=kier1}
  60.     let sam1:rej = { pojazd=maluch; posiadacz=kier2}
  61.  
  62.     let ulamek1 = {licznik= 566; mianownik=10}
  63.     let ulamek2 = {licznik=3; mianownik=20}
  64.     printfn "ulamek1 ++ ulamek2 = %A" (ulamek1 ++ ulamek2)
  65.     printfn "ulamek1 -- ulamek2 = %A" (ulamek1 -- ulamek2)
  66.     printfn "naString: ulamek1 ++ ulamek2 = %s" (naString (ulamek1 ++ ulamek2))
  67.  
  68.     printfn "ulamek1 ** 3 = " (ulamek1 ** 2)
  69.  
  70.     0 // return an integer exit code
Add Comment
Please, Sign In to add comment