Visual Basic/Arrays: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Geen bewerkingssamenvatting
JohanBeckers (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 4:
 
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 bij komt 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.
Regel 9 ⟶ 11:
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.<kbd> punt(5)</kbd>. 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 ==
 
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:
Voorbeeld:
 
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. Waarschijnlijk wil Microsoft het leven van C-programmeurs gemakkelijker maken ten koste van de Basic-programmeurs.
Hiermee definieer je een array van 20 elementen met als index 0 t/m 19.
 
== Het gebruiken van een array ==
 
Je kunt als volgt heel gemakkelijk het gemiddelde van alle punten berekenen:
Regel 50 ⟶ 54:
Het eerste element van een array heeft index 0 en het laatste element index (''aantal elementen'' - 1)
 
De onder- en bovengrens van een array achterhaal je met de functies<kbd> GetLowerBound </kbd> en <kbd> GetUpperBound</kbd>.
 
In ons voorbeeld levert<kbd> punt.GetLowerBound(0) </kbd> de waarde '''0''' op en<kbd> punt.GetUpperBound(0) </kbd>de waarde '''19'''. Het bepalen van het gemiddelde kan dus ook als volgt gebeuren:
 
Dim totaal As Integer = 0
Regel 60 ⟶ 64:
Next
gemiddelde = totaal / 20
 
Het voordeel is dat bij een aanpassing van het aantal elementen in het array<kbd> punt </kbd>dit stuke 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 behandel ik verderop.
 
Het aantal elementen van een array kunkrijg je krijgen door 1 op te tellen bij de bovengrens, maar er bestaat ook een aparte functie voor:
 
punt.Length
Regel 71 ⟶ 77:
== Meerdimensionale arrays ==
 
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 kolomrij 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
Regel 96 ⟶ 102:
 
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 ==
 
Je kunt het aantal dimensies als volgt opvragen:
Regel 108 ⟶ 116:
2
3
 
== De grootte van een array wijzigen ==
 
Het is mogelijk om een array groter of kleiner te maken. Dat kan met de opdracht<kbd> ReDim</kbd>.
 
Dim punt(19) As Integer
ReDim punt(9)
ReDim punt(29)
 
Hiermee pas je de grootte van het array<kbd> punt </kbd>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<kbd> Preserve </kbd>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.
 
Ik heb het in het begin gehad 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.
 
[[Categorie:Visual Basic]]
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.