Advertisement
Guest User

Untitled

a guest
Jan 24th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 6.43 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.net
  2. // See the 'F# Tutorial' project for more help.
  3. open System
  4.  
  5. exception N_Mniejsze_Od_Zera
  6.  
  7. let rec silnia n =
  8.     match n with
  9.     | nn when n < 0 -> raise N_Mniejsze_Od_Zera ///Dodano wyszucenie wyjątku
  10.     | 0 -> 1
  11.     | _ -> n * silnia( n-1)
  12.  
  13. let rec adob ( a, b ) =
  14.     match b with
  15.     | nn when b < 0 -> raise N_Mniejsze_Od_Zera
  16.     | 0 -> 1
  17.     | _ -> a * adob(a, b-1)
  18.    
  19. let rec fibo n =
  20.     match n with
  21.     | 0 -> 1
  22.     | 1 -> 1
  23.     | _ -> fibo( n-1) + fibo (n-2)  
  24.  
  25. let rec mRn ( m, n) =
  26.     match n with
  27.     | 0 -> m*0
  28.     | 1 -> m*1
  29.     | _ -> m + mRn (m,n-1)
  30.  
  31. let niePodzielny (d,n) =
  32.     let nn = d % n
  33.     match nn with
  34.     | 0 -> true
  35.     | _ -> false
  36.  
  37. let liczWyst (str: string , znak: char ) =
  38.     let dl = String.length str
  39.     let ilosc = ref 0
  40.     for i = 0 to  dl - 1 do
  41.         if str.[i] = znak then incr(ilosc)
  42.     ilosc.Value
  43.  
  44. let liczWystOd (str: string ,ktory:int, znak: char ) =
  45.     let dl = String.length str
  46.     let ilosc = ref 0
  47.     for i = ktory to  dl - 1 do
  48.         if str.[i] = znak then incr(ilosc)
  49.     ilosc.Value
  50.  
  51. let pow (str: string, n: int) =
  52.     match n with
  53.     | 0 -> "error"
  54.     | 1 -> str
  55.     | _ -> String.replicate(n) str
  56.  
  57. let rec NWD (m,n) =
  58.     match n with
  59.     | 0 -> abs(m)
  60.     | _ -> NWD (n, m%n)
  61.  
  62. exception DzieleniePrzezZero
  63.  
  64. let ( ++ ) (a,b)(c,d)=
  65.     if b*d = 0 then raise DzieleniePrzezZero
  66.     else  a*d + b*c, b*d
  67.  
  68. let ( -- ) (a,b)(c,d)=
  69.     if b*d = 0 then raise DzieleniePrzezZero
  70.     else  a*d - b*c, b*d
  71.  
  72. let ( ** ) (a,b)(c,d)=
  73.     if b*d = 0 then raise DzieleniePrzezZero
  74.     else  a*c b*d
  75.  
  76. let ( /./ ) (a,b)(c,d)=
  77.     if b*d = 0 then raise DzieleniePrzezZero
  78.     else  a*d,b*c
  79.  
  80. let skróc (a:int ,b: int) =
  81.     let znak = if a*b < 0 then -1 else  1
  82.     let ll = abs a
  83.     let mm = abs b
  84.     let dzielnik = NWD(ll, mm)
  85.     let licznik = ll / dzielnik
  86.     let mianownik = mm / dzielnik
  87.     znak * licznik , mianownik
  88.  
  89. let naString(a , b) =
  90.     let znak = if a*b < 0 then "-" else  ""
  91.     let licz, mian = skróc(abs(a),abs(b))
  92.     let calk = licz / mian
  93.     let licznik = licz - calk*mian
  94.     let calkowita = if calk > 0 then calk.ToString() else ""
  95.     let ulamek = if licznik > 0 then " " + licznik.ToString() + "/" + mian.ToString() else ""
  96.     znak + calkowita + ulamek
  97.  
  98. let (+++) (a,b)(c,d) =
  99.     let znak = if (b+d) < 0 then " - " else " + "
  100.     (a+c).ToString() + znak + abs((b+d)).ToString() + "i"
  101.  
  102. let (---) (a,b)(c,d) =
  103.     let znak = if (b-d) < 0 then " - " else " + "
  104.     (a-c).ToString() + znak + abs((b-d)).ToString() + "i"
  105.  
  106. let ( *** ) (a,b)(c,d) =
  107.     let znak = if (a*d + b*c) < 0 then " - " else " + "
  108.     (a*d - b*c).ToString() + znak + abs((a*d + b*c)).ToString() + "i"
  109.  
  110. let ( /././ ) (a,b)(c,d) =
  111.     if c = 0 && d = 0 then raise DzieleniePrzezZero
  112.     let znak = if (a*d + b*c) < 0 then " - " else " + "
  113.     (a,b) *** (c, -d) + "/" + (c*c + d*d).ToString()
  114.  
  115. let rec pierwsza' (n , k) =
  116.    let xx = n % k
  117.    match k with
  118.    | 1 -> true
  119.    | _ -> match xx with
  120.        | 0 -> false
  121.        | _ -> pierwsza'(n,k-1)
  122.  
  123. let pierwsza n =
  124.     pierwsza'(n,n-1)
  125.  
  126. let mnul (liczba : int, licz : int, mian: int) =
  127.    liczba * licz , mian
  128.  
  129. let dzielul (liczba : int, licz : int, mian: int) =
  130.    licz, mian * liczba
  131.  
  132. let pierul (licz : float, mian: float) =
  133.    sqrt(licz),sqrt (mian)
  134.  
  135. let odrul (licz : int, mian: int) =
  136.    mian, licz
  137.  
  138. type Student = {imie: string; nazwisko: string; indeks: int}
  139.  
  140. let SprawdzStudenty (stud1:Student list) =
  141.    let dl1 = stud1.Length
  142.    let ilosc = ref(0)
  143.  
  144.    for i = 0 to dl1 - 1 do
  145.        for k = 0 to dl1 - 1 do
  146.            if stud1.[i].nazwisko = stud1.[k].nazwisko then incr(ilosc)
  147.  
  148.    if ilosc.Value > dl1 then true else false
  149.  
  150.    //--------------------LISTY
  151.  
  152. let minlist lista =
  153.    List.min lista
  154.  
  155. let dllist lista =
  156.    List.length lista
  157.  
  158. let krotnosc (x:int , lista: int list) =
  159.    let ilosc = ref(0)
  160.    List.iter(fun a -> if a = x then incr(ilosc)) lista
  161.    ilosc.Value
  162.  
  163. let ntyel (kt, lista) =
  164.    let dl = List.length lista
  165.    if kt < dl then
  166.        lista.[kt]
  167.    else
  168.        0
  169.  
  170. let czyujemne lista =
  171.    let ileuj = ref(0)
  172.    List.iter(fun x -> if x < 0 then incr(ileuj)) lista
  173.    if ileuj.Value = lista.Length then true else false   // Tu był błąd, sprawdza funkcja czy wzystkie mają być nie ujemne
  174.  
  175. let minmax lista =
  176.    List.min lista , List.max lista
  177.  
  178.  
  179.  
  180. ///////ZADANIA Z ZALICZENIA L7///////////////////////////
  181.  
  182.  
  183. let rec len'(x:list<int>,y:int):int= //funkcja pomocnicza do funkcji nizej
  184.     match x with
  185.     | x1 :: x -> len'(x,y+1)
  186.    | x -> y
  187.  
  188. let len x = //własna implementacja funkcji lenght do listy
  189.    len'(x,0)
  190.  
  191.  
  192. [<AbstractClass>]
  193. type figura (P) =
  194.     inherit Object()
  195.     let mutable Pole:float = P
  196.  
  197.     member this.pole
  198.         with get() = Pole
  199.         and set(value:float) = Pole <- value
  200.  
  201.     abstract member ObliczPole: unit ->float
  202.  
  203.  
  204. type trójkąt (ba,bb,bc) =
  205.     inherit figura(0.0)
  206.     let mutable a : float = ba
  207.     let mutable b : float = bb
  208.     let mutable c : float = bc
  209.    
  210.     override this.ObliczPole() =
  211.         let p = (a+b+c)/2.0 //połowa obwodu
  212.         base.pole<- sqrt(abs(p*(p-a)*(p-b)*(p-c))) // wzór Herona
  213.         base.pole
  214.  
  215.  
  216. [<EntryPoint>]
  217. let main argv =
  218.     //let sil = silnia(-2)
  219.     let nn = (1,4) ++ (3,4)
  220.     let nnn = naString(-16 , 16)
  221.     let zesp = (2,3) /././ (4,-4)
  222.     let pierw = pierwsza 11
  223.  
  224.     let Zdziszek = {imie = "Zdzisław"; nazwisko = "Zdziwiony"; indeks = 23167}
  225.     let Zbyszek = {imie = "Zbyszek"; nazwisko =  "Szwagrowski"; indeks = 123212 }
  226.     let Marian = {imie = "Marian"; nazwisko = "Trzeci"; indeks = 333333 }
  227.  
  228.     let Studenty = [Zdziszek ; Zbyszek ; Marian]
  229.  
  230.     let czy = SprawdzStudenty Studenty
  231.  
  232.     //--------------------LISTY
  233.     let calk = [5;3;6;8;10;5]
  234.     let mini = minlist calk //1
  235.     let dllisty = dllist calk //2
  236.     let kr = krotnosc(4,calk) //3
  237.     let nelement = ntyel(3,calk)//4
  238.     let czyuj= czyujemne calk //5
  239.     let min,max = minmax calk //6
  240.  
  241.  
  242.     let aaaa = trójkąt(3.0,3.0,3.0)
  243.     let p2=aaaa.ObliczPole()
  244.     let P = (3.0*3.0 * sqrt(3.0))/4.0 //test czy wzór herona działa, na przykładzie trójkąta równopocznego
  245.  
  246.  
  247.     let cc = [1;2;3;4;5;6;7;8]
  248.     let dlll = len(cc)
  249.  
  250.     printfn "%A %A %A" <| p2  <| P <| aaaa.pole
  251.     System.Console.ReadKey() |> ignore
  252.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement