Visual Basic/Arrays

Uit Wikibooks

Visual Basic

Inhoudsopgave
  1. Inleiding taalelementen
  2. Variabelen
  3. Operatoren
  4. Typeconversie
  5. Keuze-instructies
  6. Herhalingsinstructies
  7. Random getallen
  8. Opmaak getallen
  9. De klasse Math
  10. Arrays
  11. De structuur van een programma

Inleiding arrays[bewerken]

Soms heb je meerdere variabelen met dezelfde betekenis nodig. Stel: je bent leraar en wilt de resultaten van een proefwerk bijhouden voor je twintig leerlingen. Je kunt dan 20 variabelen aanmaken, punt01 t/m punt20. Maar dat is wel heel omslachtig; het is veel beter om die cijfers in een array te zetten.

Stel je voor dat je zonder array werkt en dat je bijvoorbeeld voor alle werknemers in een bedrijf bij moet houden hoeveel uur ze hebben gewerkt. Je hebt dan voor iedere werknemer een variabele nodig. Bij een klein bedrijf (bijvoorbeeld 5 werknemers) zou dat nog wel gaan, maar stel je een bedrijf voor met 2000 werknemers... En wat doe je als er een werknemer bijkomt of het bedrijf verlaat? Dan moet je steeds het programma aanpassen. En dat voor alle plaatsen waar je deze gegevens gebruikt. Een fout is dus snel gemaakt. En daar komen arrays om de hoek kijken, die het leven een stuk eenvoudiger maken.

Een array is eigenlijk een lijst variabelen die je benadert met een index. Vergelijk het met een boek waarvan je de inhoud benadert met het nummer van de pagina. Op iedere bladzijde staat het punt van een leerling. Zo werkt een array eigenlijk ook.

Een array kan van ieder type zijn: Integer, String, Double, zelfs Object.

De elementen van een array worden benaderd met een numerieke index, b.v. punt(5). Let op: dit is niet het vijfde, maar het zesde element van het array, want de telling begint met 0 en niet met 1.

Het declareren van een array[bewerken]

Een array wordt, net als een gewone variabele, gedeclareerd met de Dim-instructie. Het formaat is:

Dim arraynaam(bovengrens) As Type

Neem als voorbeeld een klas met 20 leerlingen waarvan de punten worden bijgehouden in een array. De declaratie van dat array gebeurt als volgt:

Dim punt(19) As Integer

Hiermee definieer je een array van 20 elementen met als index 0 t/m 19. Let dus goed op: de bovengrens in de definitie is 1 minder dan het aantal elementen. Wat dat betreft wijkt Microsoft af van de oudere versies van Basic, waar de index met 1 begin i.p.v. met 0.

Het gebruiken van een array[bewerken]

Je kunt als volgt heel gemakkelijk het gemiddelde van alle punten berekenen:

Dim totaal As Integer = 0
Dim gemiddelde As Decimal
For i = 0 to 19
  totaal = totaal + punt(i)
Next
gemiddelde = totaal / 20

Probeer je eens voor te stellen hoe je dit moet programmeren met 20 variabelen (of 200, of 2000....).

Initialiseren van arrays[bewerken]

In een Dim-instructie kun je aan een variabele een beginwaarde geven (zie de eerste regel van het voorbeeld hierboven). Dit is ook mogelijk bij een array. Het formaat hiervan is:

Dim arraynaam() As Type = {waarde0, waarde1, ..., waardeN}

Bijvoorbeeld:

Dim punt() As Integer = {6, 7, 4, 6, 9, 4, 6, 8, 8, 7, 8, 5, 7, 8, 8, 6, 6, 7, 9, 4}

Het aantal elementen hoef je niet op te geven, dat wordt bepaald door het aantal elementen tussen accolades.

De limieten van het array[bewerken]

Het eerste element van een array heeft index 0 en het laatste element index (aantal elementen - 1)

Er is een maximum aan het aantal elementen van een array. Omdat de index een Integer is, heeft deze een bereik van 0 t/m 2^31-1 ofwel 4.294.967.295. Het maximum aantal elementen is dus 4.294.967.296.

De onder- en bovengrens van een array achterhaal je met de functies GetLowerBound en GetUpperBound.

In ons voorbeeld levert punt.GetLowerBound(0) de waarde 0 op en punt.GetUpperBound(0) de waarde 19. Het bepalen van het gemiddelde kan dus ook als volgt gebeuren:

Dim totaal As Integer = 0
Dim gemiddelde As Decimal
For i = 0 to punt.GetUpperBound(0)
  totaal = totaal + punt(i)
Next
gemiddelde = totaal / punt.Length    ' "punt.Length" instructie wordt verderop uitgelegd

Het voordeel is dat bij een aanpassing van het aantal elementen in het array punt dit stukje programma niet aangepast hoeft te worden. Deze constructie is niet alleen gemakkelijker, maar voorkomt later ook fouten als het programma aangepast moet worden.

De parameter 0 geeft aan dat de grens van de eerste dimensie van het array moet worden teruggegeven. Een array kan ook meerdere dimensies bevatten en door de 0 b.v. te vervangen door 1 krijg je de grens van de tweede dimensie van het array. Meerdimensionale array worden verderop behandeld.

Het aantal elementen van een array krijg je door 1 op te tellen bij de bovengrens, maar er bestaat ook een aparte functie voor:

punt.Length

levert het aantal elementen in het array punt, bijvoorbeeld:

aantal = punt.Length

Meerdimensionale arrays[bewerken]

Stel, de leraar wil de punten bewaren van de vakken Nederlands, Engels, Frans en Duits. Je kunt dan vier aparte arrays maken, maar het is ook mogelijk om één meerdionsionale array te maken. Dit doe je als volgt:

Dim punten(19, 3) As Integer

Je krijgt dan een tabel met 20 rijen en 4 kolommen. Iedere rij bevat de punten van één leerling en iedere kolom bevat de punten van een bepaald vak voor alle leerlingen.

punten(0,0)   ' bevat het cijfer voor Nederlands van leerling 1
punten(3,2)   ' bevat het cijfer voor Frans van leerling 4

GetUpperBound(0) geeft de bovengrens van de leerlingen (19).
GetUpperBound(1) geeft de bovengrens van de vakken (3).

Op dezelfde manier kun je dimensies toevoegen. Stel je wilt de cijfers bijhouden van vier semesters en de eindtoets, dan kun je als volgt een drie-dimensionale array declareren:

Dim punten3(19, 3, 4)

In theorie kun je nog meer dimensies toevoegen, maar drie-dimensionale arrays zijn al zeldzaam, laat staan arrays met meer dimensies.

Een tweedimensionale array kun je als volgt initialiseren:

Dim a(,) As Integer = {{1, 2, 3}},
                       {4, 5, 6},
                       {{7, 8, 9}}

Let op dat je een komma moet plaatsen tussen de haakjes achter de naam van het array. Zo weet de compiler dat dit een tweedimensionale array is. De waarden geef je per rij op (met iedere rij tussen accolades).

Aantal dimensies opvragen[bewerken]

Je kunt het aantal dimensies als volgt opvragen:

punt.Rank
punten.Rank
punten3.Rank

Je krijgt dan de volgende antwoorden:

1
2
3

De grootte van een array wijzigen[bewerken]

Het is mogelijk om een array groter of kleiner te maken. Dat kan met de opdracht ReDim. Het formaat is:

Redim [ Preserve ] arraynaam(nieuwe dimensie(s))
Dim punt(19) As Integer
ReDim punt(9)
ReDim punt(29)

Hiermee pas je de grootte van het array punt aan zodat deze 10 resp. 30 getallen kan bevatten.
Bij het aanpassen van de grootte van een array op deze manier gaat de inhoud verloren. Dit is te voorkomen door het sleutelwoord Preserve te gebruiken, bijvoorbeeld:

ReDim Preserve punt(29)

Dit gaat redelijk langzaam, omdat eerst een nieuw array wordt aangemaakt. Daarna wordt het oude array element voor element gekopieerd naar het nieuwe array en tot slot wordt het oude array verwijderd en de verwijzing naar het oude array vervangen door de verwijzing naar het nieuwe array. Het grote voordeel is dat de grootte van het array dynamisch aangepast kan worden, zo nodig met behoud van de gegevens.

In het begin is gesproken over het array met het gewerkte aantal uren per werknemer. Als een apart bestand het aantal werknemers is opgenomen, kan een programma dit bestand lezen en met dat aantal het gewenste array re-dimensioneren, zodat altijd met de juiste array-grootte wordt gewerkt. Op deze manier hoeft het programma niet aangepast te worden als het aantal werknemers wijzigt.

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.