Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.41 KB | None | 0 0
  1. exception DzieleniePrzezZero
  2.  
  3. type ulam = int*int
  4. type ulamek = {licznik: int; mianownik: int}
  5. type osoba = {imie: string; nazwisko: string; nrtelefonu: int32}
  6. type ksiazka = {tytul: string; rok: int; cena: double}
  7.  
  8. let rec NWD = function
  9.  | (0, n) -> n
  10.  | (m, n) -> NWD(n % m, m)
  11.  
  12. let skroc (l,m) =
  13.     let znak = if l*m<0 then -1 else 1
  14.     let al = abs l
  15.     let am = abs m
  16.     let d = NWD(al,am)
  17.     in (znak * (al / d), am / d)
  18.  
  19. let (++) (a, b) (c, d) =
  20.     if (b<>0 && d<>0) then skroc(a*d+ b*c, b*d)
  21.     else raise DzieleniePrzezZero
  22.  
  23. let ( -- ) (a, b) (c, d) =
  24.     if (b<>0 && d<>0) then skroc(a*d - b*c, b*d)
  25.     else raise DzieleniePrzezZero
  26.  
  27. let ( ** ) (a, b) (c, d) =
  28.     if (b<>0 && d<>0) then skroc(a*c, b*d)
  29.     else raise DzieleniePrzezZero
  30.  
  31. let ( /./ ) (a, b) (c, d) =
  32.     if (b<>0 && d<>0) then skroc((a,b) ** (d,c))
  33.     else raise DzieleniePrzezZero
  34.  
  35. let ( == ) (a, b) (c, d) =
  36.     if (b<>0 && d<>0) then (a*d = b*c)
  37.     else raise DzieleniePrzezZero
  38.  
  39. let dodajUL(u1:ulamek, u2:ulamek) =
  40.     if (u1.mianownik <> 0 && u2.mianownik <> 0) then skroc(u1.licznik*u2.mianownik + u2.licznik * u1.mianownik, u1.mianownik*u2.mianownik)
  41.     else raise DzieleniePrzezZero
  42.  
  43.  
  44. let odejmijUL(u1:ulamek, u2:ulamek) =
  45.     if (u1.mianownik <> 0 && u2.mianownik <> 0) then skroc(u1.licznik*u2.mianownik - u2.licznik * u1.mianownik, u1.mianownik*u2.mianownik)
  46.     else raise DzieleniePrzezZero
  47.  
  48. let pomnozUL(u1:ulamek, u2:ulamek) =
  49.     if (u1.mianownik <> 0 && u2.mianownik <> 0) then skroc(u1.licznik*u2.licznik, u1.mianownik*u2.mianownik)
  50.     else raise DzieleniePrzezZero
  51.  
  52. let podzielUL(u1:ulamek, u2:ulamek) =
  53.     if (u1.mianownik <> 0 && u2.mianownik <> 0) then skroc(u1.licznik*u2.mianownik, u2.licznik*u1.mianownik)
  54.     else raise DzieleniePrzezZero
  55.  
  56. let porownajUL(u1:ulamek, u2:ulamek) =
  57.     if (u1.mianownik <> 0 && u2.mianownik <> 0) then (u1.licznik*u2.mianownik = u2.licznik * u1.mianownik)
  58.     else raise DzieleniePrzezZero
  59.  
  60. let rec potega (m, n) =
  61.     match n with
  62.     | 0 -> 1
  63.     | _ -> m * potega(m, n-1)
  64.  
  65. let potegaUL ((a, b), n) =
  66.     if b <> 0 then (potega (a,n), potega (b,n))
  67.     else raise DzieleniePrzezZero
  68.  
  69. let mutable lpierwsza = false;
  70. let rec pierwsza' (n, k) =
  71.    if (k = 2) then lpierwsza
  72.    else (
  73.        if ( n % k = 0 ) then lpierwsza <- true
  74.        else lpierwsza <- lpierwsza
  75.        pierwsza' (n,k - 1)
  76.     )
  77.  
  78. let pierwsza n = pierwsza' (n,n-1)
  79.  
  80. let rec podzielnaOdDo(n:int, k:int, dzielnik:int) =
  81.    if (n % dzielnik = 0) then n
  82.    elif (n<=k) then podzielnaOdDo(n+1, k, dzielnik)
  83.    else 0
  84.  
  85. let pomnozUlPrzezLiczbe((a,b),n) =
  86.    if (b<>0) then skroc(a*n,b)
  87.    else raise DzieleniePrzezZero
  88.  
  89. let sprawdzNazwisko (o1:osoba, o2:osoba) =
  90.    if o1.nazwisko = o2.nazwisko then true
  91.    else false
  92.  
  93. let zmienCene (k:ksiazka, nowaCena:double) =
  94.    if (k.cena < nowaCena) then {k with cena=nowaCena}
  95.    else k
  96.  
  97. [<EntryPoint>]
  98. let main argv =
  99.    let ulamek1 = {licznik=3; mianownik=5}
  100.    let ulamek2 = {licznik=0; mianownik=2}
  101.    let ul1 = (2, 3)
  102.    let ul2 = (4, 5)
  103.  
  104.    let osoba1 = {imie = "a"; nazwisko = "a"; nrtelefonu = 1}
  105.    let osoba2 = {imie = "b"; nazwisko = "a"; nrtelefonu = 2}
  106.  
  107.    let mutable ksiazka = {tytul = "asd"; rok = 2000; cena = 99.99}
  108.    ksiazka <- zmienCene(ksiazka, 150.0)
  109.    printfn "%A" ksiazka
  110.    System.Console.ReadKey() |> ignore
  111.    0 // zwracanie kodu zakończenia w postaci liczby całkowitej
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement