Advertisement
Eeedi

Semantyka i weryfikacja programow Lab 2

Mar 20th, 2018
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.55 KB | None | 0 0
  1. type ulam = int*int
  2. exception DzieleniePrzezZero
  3.  
  4. type xy = { x:int; y:int }
  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.  
  17. let ( ++ ) (a, b) (c, d) =
  18.     if(b=0 || d=0)
  19.     then raise DzieleniePrzezZero
  20.     else (skroc (a*d + b*c, b*d))
  21.  
  22. let ( +++ ) (a:xy) (b:xy) =
  23.     if(a.y=0 || b.y=0)
  24.     then raise DzieleniePrzezZero
  25.     else (skroc (a.x*b.y + a.y*b.x, a.y*b.y))
  26.  
  27. let ( -- ) (a, b) (c, d) = (a*d - b*c, b*d)
  28. let ( ** ) (a, b) (c, d) = (a*c, b*d)
  29. let ( /./ ) (a, b) (c, d) = (a,b) ** (d,c)
  30. let ( == ) (a, b)  (c, d) = (a*d = b*c)
  31.  
  32. let wynik = 1./2. + 2./3. * 3./4.
  33. let wynik2 = (1,2)++(2,3)**(3,4)
  34.  
  35. let naString (l, m) =
  36.    let znak = if l*m<0 then "-" else ""
  37.    let al = abs l
  38.    let am = abs m
  39.    let d = NWD(al, am)
  40.    let calkowita = al/am
  41.    in znak + if(calkowita<>0) then System.Convert.ToString(calkowita) else ""
  42.            + if((al%am)<>0) then ( " " + (System.Convert.ToString((al%am) / d))
  43.            + "/" + (System.Convert.ToString(am / d))) else ""
  44.  
  45. let q1 = (-2, 3);
  46. let q2 = (5, -10);
  47.  
  48. let q3 = q1++q2
  49. let q4 = q2**q3
  50. let q5 = q4/./q3
  51.  
  52.  
  53. type samochod = {marka:string; rocznik:int; pojemnosc:float}
  54.  
  55. let siena = { marka = "FIAT"; rocznik = 1997; pojemnosc = 1586.0}
  56. let maluch = { marka = "FIAT"; rocznik = 1987; pojemnosc = 648.0}
  57.  
  58. let malolitrazowy (x:samochod) = x.pojemnosc < 900.0;
  59.  
  60. type osoba = {imie : string; urodzony : int; adres : string}
  61.  
  62. let kier1 = {imie="Adam"; adres = "Rzeszów"; urodzony = 1960};
  63. let kier2 = {imie="Olek"; adres = "Jasło"; urodzony = 1986};
  64.  
  65. let starszy(k1:osoba,k2:osoba) = k1.urodzony < k2.urodzony
  66.  
  67. type rej = {pojazd : samochod; posiadacz: osoba}
  68.  
  69. let sam1:rej = {pojazd = siena; posiadacz = kier1};
  70. let sam2:rej = {pojazd = maluch; posiadacz = kier2};
  71.  
  72. let wiekszapojemnosc (s1: rej, s2 :rej) =
  73.         s1.pojazd.pojemnosc > s2.pojazd.pojemnosc;
  74.  
  75. let aa={x = -2; y = 3}
  76. let bb={x = 5; y= -10}
  77.  
  78.  
  79. //6.
  80. let rec doPotegi (a, b) n =
  81.     if(n=0) then (1,1) else ((a,b)**(doPotegi (a,b)(n-1)))
  82.  
  83.  
  84. [<EntryPoint>]
  85. let main argv =
  86.     printfn "%A" q3
  87.     printfn "%A" q4
  88.     printfn "%A" q5
  89.     printfn "%A" (starszy (kier1,kier2))
  90.     printfn "%A" sam1.pojazd.rocznik
  91.     printfn "%A" (wiekszapojemnosc (sam1,sam2))
  92.     printfn "%A" (q1++q2)
  93.     printfn "%A" (aa+++bb)
  94.     printfn "%A" (naString (1,3))
  95.     printfn "%A" (doPotegi (1,2) 4)
  96.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement