Advertisement
ElfikCo

SWiP Lab 2

Mar 23rd, 2022
2,381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 6.09 KB | None | 0 0
  1. type ulamek = int * int
  2.  
  3. exception DzieleniePrzezZero
  4.  
  5. //let ( ++ ) (a, b) (c, d) = (a*d + b*c, b*d)
  6. //let ( -- ) (a, b) (c, d) = (a*d - b*c, b*d)
  7. //let ( ** ) (a, b) (c, d) = (a*c, b*d)
  8. //let ( /./ ) (a, b) (c, d) = (a,b) ** (d,c)
  9. //let ( == ) (a, b)  (c, d) = (a*d = b*c)
  10.  
  11. let rec NWD = function
  12.     | (0, n) -> n
  13.     | (m, n) -> NWD(n % m, m)
  14.  
  15. let skroc (l,m) =
  16.     let znak = if l*m<0 then -1 else 1
  17.     let al = abs l
  18.     let am = abs m
  19.     let d  = NWD(al,am)
  20.     in (znak * (al / d), am / d)
  21.  
  22. let naString (l, m) =
  23.     let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
  24.     let al = abs l (* wart.bezw. = liczba nat. *)
  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. // ZADANIE 2
  31.  
  32. type samochod = {marka : string;  rocznik : int;  pojemnosc : float}
  33.  
  34. let siena = { marka = "FIAT"; rocznik = 1997; pojemnosc = 1586.0}
  35. let maluch = { marka = "FIAT"; rocznik = 1987; pojemnosc = 648.0}
  36.  
  37. let malolitrazowy(x:samochod) = x.pojemnosc < 900.0;
  38.  
  39. type osoba = {imie : string; urodzony : int; adres : string}
  40.  
  41. let kier1 = {imie="Adam"; adres = "Rzeszów"; urodzony = 1960};
  42. let kier2 = {imie="Olek"; adres = "Jasło"; urodzony = 1986};
  43.  
  44. let starszy(k1:osoba,k2:osoba) = k1.urodzony < k2.urodzony
  45.  
  46. type rej  = {pojazd : samochod; posiadacz: osoba}
  47.  
  48. let sam1:rej = {pojazd = siena; posiadacz = kier1};
  49. let sam2:rej = {pojazd = maluch; posiadacz = kier2};
  50.  
  51. let wiekszapojemnosc (s1: rej, s2 :rej) =
  52.     s1.pojazd.pojemnosc > s2.pojazd.pojemnosc;
  53.  
  54. // Zadania samodzielne
  55.  
  56. // 1
  57.  
  58. let checkIfZero (b, d) =
  59.     if b = 0 || d = 0 then raise DzieleniePrzezZero
  60.  
  61. //let ( ++ ) (a, b) (c, d) =
  62. //    checkIfZero (b, d)
  63. //    (a*d + b*c, b*d)
  64. //let ( -- ) (a, b) (c, d) =
  65. //    checkIfZero (b, d)
  66. //    (a*d - b*c, b*d)
  67. //let ( ** ) (a, b) (c, d) =
  68. //    checkIfZero (b, d)
  69. //    (a*c, b*d)
  70. //let ( /./ ) (a, b) (c, d) =
  71. //    checkIfZero (b, d)
  72. //    checkIfZero (b, c)
  73. //    (a,b) ** (d,c)
  74. //let ( == ) (a, b)  (c, d) =
  75. //    checkIfZero (b, d)
  76. //    (a*d = b*c)
  77.  
  78. // 2
  79.  
  80. type ulamekR = { l: int; m: int }
  81.  
  82. let ( ++++ ) a b =
  83.     checkIfZero(a.m, b.m)
  84.     { l = a.l * b.m; m = a.m * b.l }
  85.  
  86. let ( ---- ) a b =
  87.     checkIfZero(a.m, b.m)
  88.     { l = a.l * b.m - a.m * b.l; m = a.m * b.l }
  89.  
  90. let ( **** ) a b =
  91.     checkIfZero(a.m, b.m)
  92.     { l = a.l * b.l; m = a.m * b.m }
  93.  
  94. let ( /.../ ) a b =
  95.     checkIfZero(a.m, b.m)
  96.     checkIfZero(a.m, b.l)
  97.     a **** { l = b.m; m = b.l }
  98.  
  99. let ( ==== ) a b =
  100.     checkIfZero(a.m, b.m)
  101.     a.l * b.m = a.m * b.l
  102.  
  103. let skrocR a =
  104.     let znak = if a.l*a.m<0 then -1 else 1
  105.     let al = abs a.l
  106.     let am = abs a.m
  107.     let d  = NWD(al,am)
  108.     { l = znak * (al / d); m = am / d }
  109.  
  110. let naStringR a =
  111.     let znak = if a.l*a.m<0 then "-" else "" (* deklaracje wewnetrzne *)
  112.     let al = abs a.l (* wart.bezw. = liczba nat. *)
  113.     let am = abs a.m
  114.     let d = NWD(al, am)
  115.     in znak + (System.Convert.ToString(al / d))
  116.             + "/" + (System.Convert.ToString(am / d))
  117. // 3
  118.  
  119. let ( ++ ) (a, b) (c, d) =
  120.     checkIfZero (b, d)
  121.     skroc (a*d + b*c, b*d)
  122. let ( -- ) (a, b) (c, d) =
  123.     checkIfZero (b, d)
  124.     skroc (a*d - b*c, b*d)
  125. let ( ** ) (a, b) (c, d) =
  126.     checkIfZero (b, d)
  127.     skroc (a*c, b*d)
  128. let ( /./ ) (a, b) (c, d) =
  129.     checkIfZero (b, d)
  130.     checkIfZero (b, c)
  131.     skroc (a,b) ** (d,c)
  132. let ( == ) (a, b)  (c, d) =
  133.     checkIfZero (b, d)
  134.     (a*d = b*c)
  135.  
  136. // 4
  137.  
  138. let naString4 (l, m) =
  139.     let znak = if l*m<0 then "-" else "" (* deklaracje wewnetrzne *)
  140.     let al = abs l (* wart.bezw. = liczba nat. *)
  141.     let am = abs m
  142.     let d = NWD(al, am)
  143.     let almin = al / d
  144.     let ammin = am / d
  145.     let calk = almin / ammin
  146.     let rest = almin % ammin
  147.     in znak + (System.Convert.ToString(calk))
  148.             + " "
  149.             + (System.Convert.ToString(rest))
  150.             + "/"
  151.             + (System.Convert.ToString(ammin))
  152.  
  153. // 5
  154.  
  155. let ( +++ ) (a, b) (c, d) =
  156.     (a + c, b + d)
  157.  
  158. let ( --- ) (a, b) (c, d) =
  159.     (a - c, b - d)
  160.  
  161. let ( *** ) (a, b) (c, d) =
  162.     (a * c - b * d, a * d - b * c)
  163.  
  164. let odwrotnosc (a, b) =
  165.     let c = a*a + b*b
  166.     if c = 0 then raise DzieleniePrzezZero
  167.     else (a / c, -b / c)
  168.  
  169. let ( /../ ) (a, b) (c, d) =
  170.     (a, b) ** odwrotnosc (c, d)
  171.  
  172. let sqrtComplex (a, b) =
  173.     0
  174.  
  175. // 6
  176.  
  177. let rec powerToUlamek (a, b) n =
  178.     if n = 0 then (1, 1)
  179.     elif n < 0 then skroc (a, b)
  180.     elif n = 1 then skroc (a * a, b * b)
  181.     else powerToUlamek (a * a, b * b) (n - 1)
  182.  
  183. // 7
  184.  
  185. let rec pierwsza' (n, o) =
  186.    if o < 1 then false
  187.    elif o = 1 then true
  188.    elif n % o = 0 then false
  189.    else pierwsza' (n, o - 1)
  190.  
  191. let pierwsza n = pierwsza' (n, n - 1)
  192.  
  193. // 8
  194.  
  195. let rec podzielnaOdDo (o, d, dzielnik) =
  196.    if o > d then -1
  197.    elif o % dzielnik = 0 then o
  198.    else podzielnaOdDo (o + 1, d, dzielnik)
  199.  
  200. // 9
  201.  
  202. let multiplyUlamekLiczba (a, b) c =
  203.    checkIfZero(b, b)
  204.    skroc (a * c, b)
  205.  
  206. let divideUlamekLiczba (a, b) c =
  207.    checkIfZero(b, c)
  208.    skroc ((a, b) /./ (c, 1))
  209.  
  210. let sqrtUlamek (a, b) =
  211.    (System.Math.Sqrt(a), System.Math.Sqrt(b))
  212.  
  213. let odwrUlamek (a, b) =
  214.    checkIfZero(a, b)
  215.    (b, a)
  216.  
  217. // 10
  218.  
  219. type osobaX = {imie : string; nazwisko : string; telefon : string}
  220.  
  221. let osoba1 = { imie = "Jan"; nazwisko = "Kowalski"; telefon = "111000222" }
  222. let osoba2 = { imie = "Roman"; nazwisko = "Nowak"; telefon = "222000111" }
  223.  
  224. let checkIfSameSurname a b =
  225.    a.nazwisko = b.nazwisko
  226.  
  227. // 11
  228.  
  229. type ksiazka = { title: string; author: string; year: int; price: float }
  230.  
  231. let ksiazka1 = { title = "Tytuł"; author = "me"}
  232.  
  233. // main
  234.  
  235. [<EntryPoint>]
  236. let main _ =
  237.    //let q1 = (-2, 0)
  238.    //let q2 = (5, -10)
  239.    //let q3 = skroc (q1 ++ q2)
  240.    //let q4 = skroc (q2 ** q3)
  241.    //let q5 = skroc (q4 /./ q3)
  242.  
  243.    printf "%d" (podzielnaOdDo (11, 17, 5))
  244.  
  245.    //printf "%A\n" (skroc q3)
  246.    //printf "%A\n" (q1 -- q2)
  247.    //printf "%A\n" (q4)
  248.    //printf "%A\n" (q5)
  249.    //printf "%A\n" (q1 == q2)
  250.    //printf "%s\n" (naString q4)
  251.    //printf "%s\n" (naString q5)
  252.    //printf "%d\n" (NWD (22, 24))
  253.    //printf "%d\n" (NWD (0, 12))
  254.    0
  255.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement