Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open Array;;
- (*Zadanie 2*)
- let cykl tab =
- let n = length tab in
- let odw = make n 0
- and akt = ref 0
- and best = ref 0 in begin
- for i = 0 to (n - 1) do
- akt := 0;
- let j = ref i in
- while odw.(!j) = 0 do
- odw.(!j) <- 1;
- akt := !akt + 1;
- if !akt > !best then best := !akt;
- j := tab.(!j)
- done
- done; !best end
- ;;
- (*Zadanie 4*)
- let nawiasy tab =
- let n = length tab
- and p = ref 0
- and k = ref 0
- and cnt = ref 0
- and best = ref 0 in
- begin
- while !k < n do
- if tab.(!k) = '(' then
- begin
- cnt := !cnt + 1;
- k := !k + 1;
- end
- else
- begin
- cnt := !cnt - 1;
- k := !k + 1;
- if !cnt < 0 then
- begin
- cnt := 0;
- p := !k;
- end
- else
- begin
- if !k - !p - !cnt > !best then
- begin
- best := !k - !p - !cnt
- end
- end
- end
- done;
- !best
- end
- ;;
- let test1 = [|'(';'(';'(';')'|];;
- let test2 = [|')';')';')'|];;
- let test3 = [|'(';'(';')';')'|];;
- let test4 = [|'(';'(';'(';')';')';')';')';'(';'(';'(';')'|];;
- type 'a tree =
- Node of 'a * 'a * 'a tree * 'a tree ref |
- Null
- ;;
- (*Zadanie 6*)
- let diag a b = Float.sqrt (a *. a +. b *. b);;
- (*czas: log(n)*)
- let diagonal a b =
- let n = length a in
- let l = ref 0
- and r = ref n
- and m = ref 0
- and w = ref 0. in
- begin
- while !l < !r do
- m := (!l + !r)/2;
- if (a.(!m) -. b.(!m)) < 0. then begin l := !m + 1 end
- else begin r := !m end
- done;
- if !l > 0 then begin
- w := (min (diag a.(!l) b.(!l)) (diag a.(!l - 1) b.(!l - 1)));
- end
- else begin w := (diag a.(!l) b.(!l)) end;
- !w
- end
- ;;
- let test1a = [|1.;2.;4.;5.;20.;25.;50.;|];;
- let test1b = [|100.;50.;25.;20.;5.;4.;2.;|];;
- (*Zadanie 10*)
- (*złożoność czasowa O(n), złożoność pamięciowa O(1)*)
- let rotacja tab k =
- let temp = ref '1'
- and n = length tab in
- let k = k mod (n - 1)
- and reverse a b =
- begin
- for i = 0 to (b - a)/2 do
- temp := tab.(a + i);
- tab.(a + i) <- tab.(b - i);
- tab.(b - i) <- !temp
- done
- end in
- begin
- reverse 0 (n - k - 1);
- reverse (n - k) (n - 1);
- reverse 0 (n - 1)
- end
- ;;
- let testchar = [|'a'; 'l'; 'a'; 'm'; 'a'; 'k'; 'o'; 't'; 'a'|];;
- (*Zadanie 13*)
- let blisko_zera tab =
- let n = length tab
- and l = ref 0
- and r = ref 0
- and m = ref 0
- and w = ref 0 in
- begin
- if (tab.(0) < tab.(n - 1)) then begin
- l := 0;
- r := n;
- while !l < !r do
- m := (!l + !r)/2;
- if tab.(!m) < 0 then begin
- l := !m + 1
- end else begin
- r := !m
- end
- done;
- if !l > 0 then begin
- w := min (abs tab.(!l)) (abs tab.(!l - 1))
- end else begin
- w := abs tab.(!l)
- end
- end else begin
- l := 0;
- r := n;
- while !l < !r do
- m := (!l + !r)/2;
- if tab.(!m) <= 0 then begin
- r := !m
- end else begin
- l := !m + 1
- end
- done;
- if !r = 0 then begin
- w := abs tab.(!r)
- end else begin
- w := min (abs tab.(!r - 1)) (abs tab.(!r))
- end
- end;
- !w
- end
- ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement