Skip to content
Bart Jacobs edited this page Feb 15, 2018 · 2 revisions

Arrays

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. Dus array_bevat_vanaf [| 1; 2; 3 |] 1 0 evalueert tot true, maar array_bevat_vanaf [| 1; 2; 3 |] 1 1 evalueert tot false.

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 tot 1, en positie_van 5 [| 2; 4; 6 |] evalueert tot 2. 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.

Wijzigen van array-elementen

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 functie maak_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.

Lussen

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.
Clone this wiki locally