|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Veronderstel we wensen in een programma 3 getallen door de gebruiker te laten invoeren. Als resultaat wensen we de ingevoerde getallen samen met de som op de console te brengen.
Dus bijvoorbeeld als programmaverloop : Console Application Output Value 1 ?
10
Value 2 ?
20
Value 3 ?
30
10 + 20 + 30 = 60 Onderstaand voorbeeld zou aan deze vereisten voldoen. Visual Basic 2010 Broncode Module Example1 Sub Main() Dim value1, value2, value3 As Integer Dim sum As Integer Console.WriteLine( "Value 1 ?") value1 = Console.ReadLine() sum += value1 Console.WriteLine( "Value 2 ?") value2 = Console.ReadLine() sum += value2 Console.WriteLine( "Value 3 ?") value3 = Console.ReadLine() sum += value3 Console.Write(value1) Console.Write( " + ") Console.Write(value2) Console.Write( " + ") Console.Write(value3) Console.Write( " = ") Console.Write(sum) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Bovenstaande oplossing functioneert naar de veronderstelde opdracht. 7.1.1. Wat zijn ArraysEen alternatieve werkwijze voor het bekomen van hetzelfde resultaat als in vorig voorbeeld zou gebruik kunnen maken van een "array" ( "tabel" ).
Een array is een verzameling van elementen van hetzelfde datatype. Dus bijvoorbeeld een verzameling van Integer elementen. Visual Basic 2010 Broncode Module Example2 Sub Main() Dim values(2) As Integer Dim sum As Integer Console.WriteLine( "Value 1 ?") values(0) = Console.ReadLine() sum += values(0) Console.WriteLine( "Value 2 ?") values(1) = Console.ReadLine() sum += values(1) Console.WriteLine( "Value 3 ?") values(2) = Console.ReadLine() sum += values(2) Console.Write(values(0)) Console.Write( " + ") Console.Write(values(1)) Console.Write( " + ") Console.Write(values(2)) Console.Write( " = ") Console.Write(sum) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Value 1 ?
10
Value 2 ?
20
Value 2 ?
30
10 + 20 + 30 = 60 Aan elk element van de array is een index gekoppeld. Alle elementen zijn dus te benaderen via een index. De indexering van die elementen is steeds "zero-based". De laagste index, of index van het eerste element is dus altijd 0. Het tweede element heeft dan als index 1, het derde element als index 2, enzovoort ... . De laagste index wordt ook wel "lowerbound" genoemd. De hoogste index ( ook wel "upperbound" genoemd ) is dus steeds gelijk aan het aantal elementen verminderd met 1. Bij een array met 10 elementen bijvoorbeeld zal dus de upperbound of hoogste index 9 zijn.
Men kan verwijzen naar een element van een array door na de identifier van de arrayvariabele - tussen de haakjes - de index van het element te vermelden. values(2) wijst dus bijvoorbeeld naar het derde element. De index moet geformuleerd worden aan de hand van een Integer expressie. In bovenstaand voorbeeld zijn dit literals, maar dit kan in eender welke Integer vorm gebeuren, zoals bijvoorbeeld aan de hand van variabelen ( zie volgend voorbeeld ).
Vooraleer we in bovenstaand voorbeeld de array gebruiken, wordt deze gedeclareerd. Dit kan als volgt gebeuren : Dim <identifier>(<upperbound>) <type-specifier> Bovenstaande array declaratie Dim values(2) As Integer kan ook als Dim values(0 To 2) As Integer geformuleerd worden. Deze laatste heeft duidelijk aan wat de lower- en upperbound ( en dus het indexbereik ) is voor deze array. Nogmaals de lowerbound is hier altijd 0 en kan niet worden aangepast.
De elementen van de array worden in het geheugen naast elkaar gestockeerd. Voor een array met 3 Integer elementen zal ruwweg evenveel geheugen vereist zijn als voor, als voor 3 aparte Integer variabelen.
Het gebruik van arrays heeft enkele voordelen ten aanzien van het gebruik van "statisch gedefinieerde" variabelen.
Eén voordeel bestaat erin dat men de elementen op een dynamische wijze kan adresseren. Dit kan bijvoorbeeld door via een Integer expressie, bijvoorbeeld een Integer variabele - die at runtime kan wijzigen -, naar de index van het element te verwijzen. Dit kan bijvoorbeeld bruikbaar zijn om in een iteratie een gelijkaardige actie toe te passen op alle ( of een aantal ) elementen van de array.
Hier wensen we alle elementen op te vullen met de invoer van de gebruiker, en alle elementen waarden bij de som op te tellen. Visual Basic 2010 Broncode Module Example3 Sub Main() Dim values(2) As Integer Dim sum As Integer Dim index As Integer For index = 0 To 2 Console.WriteLine( "Value " & index + 1 & " ?") values(index) = Console.ReadLine() sum += values(index) Next Console.Write(values(0)) For index = 1 To 2 Console.Write( " + ") Console.Write(values(index)) Next Console.Write( " = ") Console.Write(sum) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Value 1 ?
10
Value 2 ?
20
Value 2 ?
30
10 + 20 + 30 = 60 Een For ... Next iteratiestructuur is ideaal om dergelijke elementaire acties op iteratieve wijze op de elementen van een array uit te voeren. Men beschikt bij die For ... Next immers altijd over een teller variabele die over een bepaald numeriek bereik loopt, en de "body" van de lus zal dan voor elke waarde die die tellervariabele aanneemt worden uitgevoerd. Als je nu de tellervariabele laat lopen over het index-bereik van die array, dus van de lowerbound ( steeds 0 ) tot de upperbound ( steeds aantal elementen - 1 ) dan kun je zo, door de teller variabele als index waarde te gebruiken, alle elementen van die array benaderen.
Een ander voordeel van het gebruik van arrays bestaat erin dat de grootte ( het aantal elementen ) van de array at runtime kan worden ingesteld.
Men kan dit bekomen door een variabele te gebruiken als upperbound in de declaratie van de array. Visual Basic 2010 Broncode Module Example4 Sub Main() Console.WriteLine( "Count ?") Dim count As Integer = Console.ReadLine() Dim values(count - 1) As Integer Dim sum As Integer Dim index As Integer For index = 0 To count - 1 Console.WriteLine( "Value " & index + 1 & " ?") values(index) = Console.ReadLine() sum += values(index) Next Console.Write(values(0)) For index = 1 To count - 1 Console.Write( " + ") Console.Write(values(index)) Next Console.Write( " = ") Console.Write(sum) Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Value 1 ?
10
Value 2 ?
20
Value 2 ?
30
10 + 20 + 30 = 60 Bemerk ook hoe de eindwaarde van de tellervariabele in de For ... Next iteratiestructuur verwijst naar het aantal elementen min 1.
Naast het instellen van het aantal elementen at runtime, is het ook mogelijk het aantal elementen te doen toe- of afnemen at runtime ( zie volgend topic ).
Onderstaand voorbeeld illustreert nog 2 aspecten : - alle elementen bevatten na het aanmaken van de array steeds de default waarde van het datatype ( vermeld in de As clausule van de arraydeclaratie ) van de elementen ( regel (1) en (2) ) - men kan geen element aanspreken op een onbestaande index ( regel (3) ), doet men dit toch dan wordt een uitvoeringsfout veroorzaakt Visual Basic 2010 Broncode Module Example5 Sub Main() Dim values(4) As Integer Dim conditions(4) As Boolean Dim index As Integer For index = 0 To 4 Console.WriteLine(values(index)) Console.WriteLine(conditions(index)) Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output 0
False
0
False
0
False
0
False
0
False Een uitvoeringsfout ( ook wel runtimefout of exception genoemd ) wordt niet opgemerkt door de compiler ( is dus geen compileerfout ), maar komt pas tijdens het uitvoeren naar voren. boven
7.1.2. OefeningenOpgave :
Maak een programma dat een array van 5 elementen opvult met door de gebruiker ingevoerde getallen.
Breng nu de inhoud van de tabel in omgekeerde volgorde op de console. Console Application Output Value 1 : 6
Value 2 : 2
Value 3 : 5
Value 4 : 4
Value 5 : 9
Element 5 ( at index 4 ) : 9
Element 4 ( at index 3 ) : 4
Element 3 ( at index 2 ) : 5
Element 2 ( at index 1 ) : 2
Element 1 ( at index 0 ) : 6 Oplossing : Visual Basic 2010 Broncode Module Exercise1Solution Sub Main() Dim count As Integer = 5 Dim upperbound As Integer = count - 1 Dim values(upperbound) As Integer Dim index As Integer For index = 0 To upperbound Console.Write( "Value " & (index + 1) & " : ") values(index) = Console.ReadLine() Next For index = upperbound To 0 Step -1 Console.WriteLine( "Element " & (index + 1) & _ " ( at index " & (index) & " ) : " & _ values(index)) Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat eerst aan de gebruiker vraagt hoeveel getallen hij wenst in te voeren. Na de invoer van deze getallen brengt het programma de grootst ingevoerde waarde ( samen met zijn positie in de tabel ) op de console.
Let op : indien alle ingevoerde getallen negatief zouden zijn, mag niet op het scherm komen dat 0 de grootst ingevoerde waarde is. Console Application Output Count : 3
Value 1 : -8
Value 2 : -2
Value 3 : -3
Highest Value : -2 ( element 2 at index 1 ) Oplossing : Visual Basic 2010 Broncode Module Exercise2Solution Sub Main() Console.Write( "Count : ") Dim count As Integer = Console.ReadLine() Dim upperbound As Integer = count - 1 Dim values(upperbound) As Integer Dim index, highestValueIndex As Integer For index = 0 To upperbound Console.Write( "Value " & (index + 1) & " : ") values(index) = Console.ReadLine() If values(highestValueIndex) < values(index) Then highestValueIndex = index End If Next Console.WriteLine( "Highest Value : " & values(highestValueIndex) & _ " ( element " & (highestValueIndex + 1) & _ " at index " & highestValueIndex & " )") Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat een array van 10 elementen opvult met de waarden 10 tot en met 1 : index 0 1 2 3 4 5 6 7 8 9 value 10 9 8 7 6 5 4 3 2 1 Doe dit door naast de arrayvariabele slechts 1 overige variabele te declareren.
Breng ter controle de elementen 1 voor 1 op de console. Console Application Output element 1 ( index 0 ) : 10
element 2 ( index 1 ) : 9
element 3 ( index 2 ) : 8
element 4 ( index 3 ) : 7
element 5 ( index 4 ) : 6
element 6 ( index 5 ) : 5
element 7 ( index 6 ) : 4
element 8 ( index 7 ) : 3
element 9 ( index 8 ) : 2
element 10 ( index 9 ) : 1 Oplossing : Visual Basic 2010 Broncode Module Exercise3Solution Sub Main() Dim values(9) As Integer Dim index As Integer For index = 0 To 9 values(index) = 10 - index Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values(index)) Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat een array van 10 elementen opvult met de waarden 1 tot en met 10 : index 0 1 2 3 4 5 6 7 8 9 value 1 2 3 4 5 6 7 8 9 10 Breng deze getallen 1 voor 1 op de console.
VERWISSEL nu de inhoud van de elementen naar onderstaand schema : ( let op : verwisselen en dus niet opnieuw genereren ) index 0 1 2 3 4 5 6 7 8 9 value 10 9 8 7 6 5 4 3 2 1 Breng nu ter controle ook deze elementen 1 voor 1 op de console. Console Application Output element 1 ( index 0 ) : 1
element 2 ( index 1 ) : 2
element 3 ( index 2 ) : 3
element 4 ( index 3 ) : 4
element 5 ( index 4 ) : 5
element 6 ( index 5 ) : 6
element 7 ( index 6 ) : 7
element 8 ( index 7 ) : 8
element 9 ( index 8 ) : 9
element 10 ( index 9 ) : 10
element 1 ( index 0 ) : 10
element 2 ( index 1 ) : 9
element 3 ( index 2 ) : 8
element 4 ( index 3 ) : 7
element 5 ( index 4 ) : 6
element 6 ( index 5 ) : 5
element 7 ( index 6 ) : 4
element 8 ( index 7 ) : 3
element 9 ( index 8 ) : 2
element 10 ( index 9 ) : 1 Oplossing : Visual Basic 2010 Broncode Module Exercise4Solution Sub Main() Dim count As Integer = 10 Dim upperbound As Integer = count - 1 Dim values(upperbound) As Integer Dim index As Integer For index = 0 To upperbound values(index) = index + 1 Next For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values(index)) Next Console.WriteLine() Dim backup As Integer For index = 0 To (count \ 2) - 1 backup = values(index) values(index) = values(upperbound - index) values(upperbound - index) = backup Next For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values(index)) Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat een array van 10 elementen opvult met de waarden 1 tot en met 10 : index 0 1 2 3 4 5 6 7 8 9 value 1 2 3 4 5 6 7 8 9 10 Breng deze getallen 1 voor 1 op de console.
VERSCHUIF nu de inhoud van de elementen naar onderstaand schema : ( let op : verschuiven en dus niet opnieuw genereren ) index 0 1 2 3 4 5 6 7 8 9 value 2 3 4 5 6 7 8 9 10 1 Breng nu ter controle ook deze elementen 1 voor 1 op de console. Console Application Output element 1 ( index 0 ) : 1
element 2 ( index 1 ) : 2
element 3 ( index 2 ) : 3
element 4 ( index 3 ) : 4
element 5 ( index 4 ) : 5
element 6 ( index 5 ) : 6
element 7 ( index 6 ) : 7
element 8 ( index 7 ) : 8
element 9 ( index 8 ) : 9
element 10 ( index 9 ) : 10
element 1 ( index 0 ) : 2
element 2 ( index 1 ) : 3
element 3 ( index 2 ) : 4
element 4 ( index 3 ) : 5
element 5 ( index 4 ) : 6
element 6 ( index 5 ) : 7
element 7 ( index 6 ) : 8
element 8 ( index 7 ) : 9
element 9 ( index 8 ) : 10
element 10 ( index 9 ) : 1 Oplossing : Visual Basic 2010 Broncode Module Exercise5Solution Sub Main() Dim count As Integer = 10 Dim upperbound As Integer = count - 1 Dim values(upperbound) As Integer Dim index As Integer For index = 0 To upperbound values(index) = index + 1 Next For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values(index)) Next Console.WriteLine() Dim backup As Integer = values(0) For index = 0 To (upperbound - 1) values(index) = values(index + 1) Next values(upperbound) = backup For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values(index)) Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat een array van 10 elementen opvult met de waarden 1 tot en met 10 : array 1 : index 0 1 2 3 4 5 6 7 8 9 value 1 2 3 4 5 6 7 8 9 10 Breng deze getallen 1 voor 1 op de console.
Maak een 2e array met de waarden 10 tot en met 1 : array 2 : index 0 1 2 3 4 5 6 7 8 9 value 10 9 8 7 6 5 4 3 2 1 Breng ook deze getallen 1 voor 1 op de console.
Breng nu ten slotte de grootste waarde ( van de elementen op de zelfde index van de eerste arrays ) over naar een derde array van dus ook 10 elementen : array 3 : index 0 1 2 3 4 5 6 7 8 9 value 10 9 8 7 6 6 7 8 9 10 Breng nu ter controle ook deze elementen 1 voor 1 op de console. Console Application Output Array 1 :
element 1 ( index 0 ) : 1
element 2 ( index 1 ) : 2
element 3 ( index 2 ) : 3
element 4 ( index 3 ) : 4
element 5 ( index 4 ) : 5
element 6 ( index 5 ) : 6
element 7 ( index 6 ) : 7
element 8 ( index 7 ) : 8
element 9 ( index 8 ) : 9
element 10 ( index 9 ) : 10
Array 2 :
element 1 ( index 0 ) : 10
element 2 ( index 1 ) : 9
element 3 ( index 2 ) : 8
element 4 ( index 3 ) : 7
element 5 ( index 4 ) : 6
element 6 ( index 5 ) : 5
element 7 ( index 6 ) : 4
element 8 ( index 7 ) : 3
element 9 ( index 8 ) : 2
element 10 ( index 9 ) : 1
Array 3 :
element 1 ( index 0 ) : 10
element 2 ( index 1 ) : 9
element 3 ( index 2 ) : 8
element 4 ( index 3 ) : 7
element 5 ( index 4 ) : 6
element 6 ( index 5 ) : 6
element 7 ( index 6 ) : 7
element 8 ( index 7 ) : 8
element 9 ( index 8 ) : 9
element 10 ( index 9 ) : 10 Oplossing : Visual Basic 2010 Broncode Module Exercise6Solution Sub Main() Dim count As Integer = 10 Dim upperbound As Integer = count - 1 Dim values1(upperbound) As Integer Dim values2(upperbound) As Integer Dim values3(upperbound) As Integer Dim index As Integer For index = 0 To upperbound values1(index) = index + 1 Next Console.WriteLine( "Array 1 :") For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values1(index)) Next Console.WriteLine() For index = 0 To upperbound values2(index) = count - index Next Console.WriteLine( "Array 2 :") For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values2(index)) Next Console.WriteLine() For index = 0 To upperbound If values1(index) >= values2(index) Then values3(index) = values1(index) Else values3(index) = values2(index) End If Next Console.WriteLine( "Array 3 :") For index = 0 To upperbound Console.WriteLine( "element " & (index + 1) & _ " ( index " & index & " ) : " & _ values3(index)) Next Console.WriteLine() Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opgave : Maak een programma dat aan de gebruiker vraag hoeveel fibonaccigetallen deze wenst te zien.
De fibonaccireeks : 1 1 2 3 5 8 13 21 34 55 89 ... De eerste 2 getallen zijn 1, alle volgende getallen zijn de som van de vorige 2 getallen.
Los dit op aan de hand van een array, vul een array op met het gevraagde aantal getallen, en breng de inhoud van deze array op de console. Console Application Output Count : 1
1 Console Application Output Count : 2
1 1 Console Application Output Count : 3
1 1 2 Console Application Output Count : 11
1 1 2 3 5 8 13 21 34 55 89 Oplossing : Visual Basic 2010 Broncode Module Exercise7Solution Sub Main() Console.Write( "Count : ") Dim count As Integer = Console.ReadLine() If count <= 0 Then Console.WriteLine( "Error : Minimum count 1.") Else Dim upperbound As Integer = count - 1 Dim fibonacci(upperbound) As Integer Dim index As Integer fibonacci(0) = 1 If count > 1 Then fibonacci(1) = 1 For index = 2 To upperbound fibonacci(index) = fibonacci(index - 1) + fibonacci(index - 2) Next End If For index = 0 To upperbound Console.Write(fibonacci(index) & " ") Next End If Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|