Advertisement
kojotuse

Untitled

Jan 24th, 2016
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 7.47 KB | None | 0 0
  1. exception UJEMNY_ANGUMENT
  2.  
  3. //f1
  4. let rec silnia(n:int) : int =
  5.     if n < 0 then raise UJEMNY_ANGUMENT
  6.     elif n < 2 then 1
  7.     else n * silnia(n-1)
  8.  
  9. let rec silnia2 n =
  10.     match n with
  11.     | 0 -> 1
  12.     | 1 -> 1
  13.     | _ -> n * silnia( n-1)
  14.  
  15. //f2
  16. let rec potega(a:int, b:int) : int =
  17.     if b < 0 then raise UJEMNY_ANGUMENT
  18.     elif b = 0 then 1
  19.     else a * potega(a, b-1)
  20.  
  21. let rec potega2 ( a, b ) =
  22.     match b with
  23.     | 0 -> 1
  24.     | _ -> a * potega2(a, b-1)
  25.  
  26. //f3
  27. let rec fib(n:int) : int =
  28.     if n < 0 then raise UJEMNY_ANGUMENT
  29.     elif n = 0 then 0
  30.     elif n = 1 then 1
  31.     else fib(n-1) + fib(n-2)
  32.  
  33. let rec fib2 n =
  34.     match n with
  35.     | 0 -> 1
  36.     | 1 -> 1
  37.     | _ -> fib2( n-1) + fib2 (n-2)
  38.  
  39. //f4
  40. let rec mnozenie(m:int, n: int) : int =
  41.     if m < 0 || n < 0 then raise UJEMNY_ANGUMENT
  42.     elif n = 0 then 0
  43.     elif n = 1 then m
  44.     else m + mnozenie(m, n-1)
  45.  
  46. let rec mnozenie2 ( m, n) =
  47.     match n with
  48.     | 0 -> m*0
  49.     | 1 -> m*1
  50.     | _ -> m + mnozenie2 (m,n-1)
  51.  
  52. //f5
  53. let niepodzielny(d:int, n: int) : bool =
  54.     d % n <> 0
  55.  
  56. let niepodzielny2 (d,n) =
  57.     let nn = d % n
  58.     match nn with
  59.     | 0 -> true
  60.     | _ -> false
  61.  
  62. //f6
  63. let liczwyst(lan:string, zn:char) : int =
  64.     let ilosc = ref(0)
  65.     for i = 0 to lan.Length - 1 do
  66.         if lan.[i] = zn then incr(ilosc)
  67.     ilosc.Value
  68.  
  69. let liczwyst2 (str: string , znak: char ) =
  70.     let dl = String.length str
  71.     let ilosc = ref 0
  72.     for i = 0 to  dl - 1 do
  73.         if str.[i] = znak then incr(ilosc)
  74.     ilosc.Value
  75.  
  76. //f7
  77. let liczwystod(lan:string, od:int, zn:char) : int =
  78.     let ilosc = ref(0)
  79.     for i = od to lan.Length - 1 do
  80.         if lan.[i] = zn then incr(ilosc)
  81.     ilosc.Value
  82.  
  83. let liczWystOd2 (str: string ,ktory:int, znak: char ) =
  84.     let dl = String.length str
  85.     let ilosc = ref 0
  86.     for i = ktory to  dl - 1 do
  87.         if str.[i] = znak then incr(ilosc)
  88.     ilosc.Value
  89.    
  90. //f8
  91. let pow(lan:string, il:int) : string =
  92.     String.replicate il lan
  93.  
  94. let pow2 (str: string, n: int) =
  95.     match n with
  96.     | 0 -> "error"
  97.     | 1 -> str
  98.     | _ -> String.replicate(n) str
  99.  
  100. ///////////////////////////////////////////////
  101. exception DzieleniePrzezZero
  102.  
  103. //k1
  104. let rec NWD (m:int, n:int) : int =
  105.     if n = 0 then abs(m)
  106.     else NWD(n, m%n)
  107.  
  108. let rec NWD2 (m,n) =
  109.     match n with
  110.     | 0 -> abs(m)
  111.     | _ -> NWD2(n, m%n)
  112.  
  113. //k2
  114. let (++) (a,b) (c,d) =
  115.     if b*d = 0 then raise DzieleniePrzezZero
  116.     else a*d + b*c , b*d
  117.  
  118. let ( -- ) (a,b)(c,d)=
  119.     if b*d = 0 then raise DzieleniePrzezZero
  120.     else  a*d - b*c, b*d
  121.  
  122. let ( ** ) (a,b)(c,d)=
  123.     if b*d = 0 then raise DzieleniePrzezZero
  124.     else  a*c b*d
  125.  
  126. let ( /./ ) (a,b)(c,d)=
  127.     if b*d = 0 then raise DzieleniePrzezZero
  128.     else  a*d,b*c
  129.  
  130. //k3
  131. let skróc (a:int ,b: int) =
  132.     let znak = if a*b < 0 then -1 else  1
  133.     let ll = abs a
  134.     let mm = abs b
  135.     let dzielnik = NWD(ll, mm)
  136.     let licznik = ll / dzielnik
  137.     let mianownik = mm / dzielnik
  138.     znak * licznik , mianownik
  139.  
  140. //k4 !!!
  141. let naString(a , b) =
  142.     let znak = if a*b < 0 then "-" else  ""
  143.     let licz, mian = skróc(abs(a),abs(b))
  144.     let calk = licz / mian
  145.     let licznik = licz - calk*mian
  146.     let calkowita = if calk > 0 then calk.ToString() else ""
  147.     let ulamek = if licznik > 0 then " " + licznik.ToString() + "/" + mian.ToString() else ""
  148.     znak + calkowita + ulamek
  149.  
  150. //k5
  151. let (+++) (a,b)(c,d) =
  152.     let znak = if (b+d) < 0 then " - " else " + "
  153.     (a+c).ToString() + znak + abs(b+d).ToString() + "i"
  154.  
  155. let (---) (a,b)(c,d) =
  156.     let znak = if (b-d) < 0 then " - " else " + "
  157.     (a-c).ToString() + znak + abs(b-d).ToString() + "i"
  158.  
  159. let ( *** ) (a,b)(c,d) =
  160.     let znak = if (a*d + b*c) < 0 then " - " else " + "
  161.     (a*d - b*c).ToString() + znak + abs(a*d + b*c).ToString() + "i"
  162.  
  163. let ( /././ ) (a,b)(c,d) =
  164.     if c*c - d*d = 0 then raise DzieleniePrzezZero
  165.     let znak = if (a*d + b*c) < 0 && c*c - d*d > 0 || (a*d + b*c) > 0 && c*c - d*d < 0 then " - " else " + "
  166.     znak + (a,b) *** (c, -d) + "/" + (c*c + d*d).ToString()
  167.  
  168. //k6
  169. let rec pierwsza' (n , k) =
  170.    let xx = n % k
  171.    match k with
  172.    | 1 -> true
  173.    | _ -> match xx with
  174.            | 0 -> false
  175.            | _ -> pierwsza'(n,k-1)
  176.  
  177. let pierwsza n =
  178.     pierwsza'(n,n-1)
  179.  
  180. //k7
  181. let mnul (liczba : int, licz : int, mian: int) =
  182.    liczba * licz , mian
  183.  
  184. let dzielul (liczba : int, licz : int, mian: int) =
  185.    licz, mian * liczba
  186.  
  187. let pierul (licz : float, mian: float) =
  188.    sqrt(licz),sqrt (mian)
  189.  
  190. let odrul (licz : int, mian: int) =
  191.    mian, licz
  192.  
  193. //k8
  194. type Student = {imie: string; nazwisko: string; indeks: int}
  195.  
  196. let studenci = [{imie = "Jan"; nazwisko = "Kowalski"; indeks = 123123};
  197.                {imie = "Marcin"; nazwisko = "Kowalski"; indeks = 123555}]
  198.  
  199. let SprawdzStudenty (stud1:Student list) =
  200.    let dl1 = stud1.Length
  201.    let ilosc = ref(0)
  202.  
  203.    for i = 0 to dl1 - 1 do
  204.        for k = 0 to dl1 - 1 do
  205.            if stud1.[i].nazwisko = stud1.[k].nazwisko then incr(ilosc)
  206.  
  207.    if ilosc.Value > dl1 then true else false
  208.  
  209. /////////////////////////////////////////////////
  210.  
  211. //l1 - zwraca int a nie int option !!!
  212. let listamin (lst: int list) : int =
  213.    let dl = lst.Length
  214.    let mutable min = lst.[0]
  215.    for i=1 to dl-1 do
  216.        if lst.[i] < min then min <- lst.[i]
  217.    min
  218.  
  219. //l2
  220. (*let listalen (lst: int list) =    
  221.    let len = ref(0)
  222.    try
  223.        while true do
  224.            lst.[len.Value]
  225.            incr(len)
  226.    with
  227.        | :? System.ArgumentException -> len.Value
  228. *)
  229. let dllist lista =
  230.    List.length lista
  231.  
  232. //l3
  233. let krotnosc (x:int , lista: int list) =
  234.    let ilosc = ref(0)
  235.    List.iter(fun a -> if a = x then incr(ilosc)) lista
  236.    ilosc.Value
  237.  
  238. //l4
  239. let ntyel (kt, lista) =
  240.    let dl = List.length lista
  241.    if kt < dl then
  242.        lista.[kt]
  243.    else
  244.        0
  245.  
  246. //l5
  247. let czyujemne lista =
  248.    let ileuj = ref(0)
  249.    List.iter(fun x -> if x < 0 then incr(ileuj)) lista
  250.    if ileuj.Value > 0 then true else false
  251.  
  252. //l6
  253. let minmax lista =
  254.    List.min lista , List.max lista
  255.  
  256. //l7
  257. let sumalisty(lst: int list) =
  258.    List.sum(List.map(fun x->x) lst)  
  259.  
  260. //l8
  261. let sumList2 lst =
  262.    List.fold (fun acc elem -> acc + elem) 0 lst
  263.  
  264. //l9
  265. let mullist lst =
  266.    List.fold (fun mul elem -> mul * elem) 1 lst
  267.  
  268. //l10
  269. let mullist2 lst =
  270.    List.fold (fun mul elem -> mul * elem) 1 lst
  271.    |> float
  272.  
  273. //l11
  274. let wystlan (lst : string list, lan: string) =
  275.    let ind = ref 0
  276.    try
  277.        while (lst.[ind.Value] <> lan && ind.Value < lst.Length) do
  278.            incr ind
  279.        Some ind.Value
  280.    with
  281.        | :? System.ArgumentException -> printfn "Poza indeksem, brak wystapien" ; None
  282.  
  283.  
  284. //l12
  285. let wystlanLiczy (lst : string list, lan: string) =
  286.    let wyst = ref 0
  287.    for i = 0 to lst.Length - 1 do
  288.        if lst.[i] = lan then
  289.            incr wyst
  290.    wyst.Value
  291.  
  292. //l13
  293. let inttostr (lst : int list) =
  294.    List.map(fun x -> x.ToString()) lst
  295.  
  296.  
  297. [<EntryPoint>]
  298. let main argv =
  299.    //let w = silnia 3
  300.    //let w = potega(2, 4)
  301.    //let w = fib(10)
  302.    //let w = mnozenie(4,5)
  303.    //let w = niepodzielny(4,2)
  304.    //let w = liczwyst("abca0", 'b')
  305.    //let w = liczwystod("abca0", 1, 'a')
  306.    //let w = pow("abca0", 5)
  307.    //let w = System.Convert.ToInt32(wystlan(ls, "dd"))
  308.    let ll = [1;2;3;-1;5]
  309.    let ls = ["aa"; "bb";"bb"]
  310.    //let w = wystlanLiczy(ls, "cc")
  311.    let w = inttostr(ll)
  312.    printfn "%A " w
  313.    System.Console.ReadKey()
  314.    0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement