-
Notifications
You must be signed in to change notification settings - Fork 0
Arrays
Bart Jacobs edited this page Feb 15, 2018
·
2 revisions
Opdracht:
- Tik
[| 1; 2; 3; 4 |]
in. - OCaml antwoordt met
- : int array = [| 1; 2; 3; 4 |]
. - Tik
let xs = [| 1; 2; 3; 4 |]
in. - Tik dan
xs.(0)
in. - OCaml antwoordt met
- : int = 1
. Arrays zijn zoals lijsten, behalve dat sommige operaties een andere performantie hebben. Het ophalen van het N-de element gebeurt bij arrays in constante tijd, terwijl de tijd die hiervoor nodig is bij lijsten lineair is in het aantal elementen van de lijst. - Tik dan
Array.length xs
in. - OCaml antwoordt met
- : int = 4
.
Oefening:
- Definieer een functie
array_bevat_vanaf
die nagaat of een gegeven array een gegeven element bevat op een positie groter dan of gelijk aan de gegeven positie. Dusarray_bevat_vanaf [| 1; 2; 3 |] 1 0
evalueert tottrue
, maararray_bevat_vanaf [| 1; 2; 3 |] 1 1
evalueert totfalse
.
Oefening:
- Definieer een functie
array_bevat
die nagaat of een gegeven array een gegeven element bevat.
Oefening:
- Definieer de functie
positie_van
, die, gegeven een getal en een gesorteerde array, de positie van dit getal in de array teruggeeft, ofwel de positie waar dit getal ingevoegd mag worden zodat de array gesorteerd blijft. Bijvoorbeeld:positie_van 4 [| 3; 4; 5 |]
evalueert tot1
, enpositie_van 5 [| 2; 4; 6 |]
evalueert tot2
. Definieer de functie zó dat ze slechts een aantal opzoekingen doet van elementen in de array dat logaritmisch is in de lengte van de array. Dus: in een array van lengte 32 mag je slechts 5 opzoekingen doen.
Opdracht:
- Tik
let xs = [| 0 |]
in. - Tik dan
xs.(0) <- 3
in. - Tik dan
xs.(0)
in. - OCaml antwoordt met
- : int = 3
.
Oefening:
- Definieer een functie
maak_positief
die alle negatieve elementen van een gegeven array vervangt door hun negatie. (Definieer hiervoor eerst een functiemaak_positief_vanaf
.)
Oefening:
- Definieer een functie
sorteer
die, gegeven een array, de elementen van deze array verplaatst zodat de array gesorteerd wordt. Gebruik hiervoor het QuickSort-algoritme.
In de meeste programmeertalen kan je lussen schrijven. In OCaml ook, ook al gebruikt men in OCaml typisch recursieve functies om hetzelfde effect te bereiken. Ziehier de functie maak_positief
, geschreven met een lus:
let maak_positief_lus array =
for i = 0 to Array.length array - 1 do
if array.(i) < 0 then
array.(i) <- -array.(i)
done
Opdracht
- Tik deze functie in.
- Tik dan in
let x = [| -8; 3; -7 |]
. - Tik dan in
maak_positief_lus x
. - Tik dan in
x
. - OCaml antwoordt met
- : int array = [| 8; 3; 7 |]
.
Oefening:
- Schrijf een functie
alles_plus_een
die één bijtelt bij elk element van een gegeven array.
Oefening:
- Schrijf een functie
spiegel
die de elementen in een gegeven array spiegelt: het eerste element wordt het laatste, het tweede wordt het voorlaatste, enz.