|
Dit artikel is gepubliceerd op woensdag 28 april 2010 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 programma-verloop : Visual Basic Output Value 1 ?
10
Value 2 ?
20
Value 3 ?
30
10 + 20 + 30 = 60 Onderstaand voorbeeld zou aan deze vereisten voldoen. Visual Basic 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic 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 Broncode Module Example4
Sub Main()
Console.WriteLine("Count ?")
Dim count As Integer = Console.ReadLine()
Dim values(count) 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Visual Basic 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. Terug naar 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. Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic Output Count : 3
Value 1 : -8
Value 2 : -2
Value 3 : -3
Highest Value : -2 ( element 2 at index 1 ) Oplossing : Visual Basic 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic 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 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
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. Visual Basic Output Count : 1
1 Visual Basic Output Count : 2
1 1 Visual Basic Output Count : 3
1 1 2 Visual Basic Output Count : 11
1 1 2 3 5 8 13 21 34 55 89 Oplossing : Visual Basic 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 Sub
End ModuleDownload Visual Basic Broncode Bekijk deze Broncode in Visual C#
Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Visual Basic 2008 & 2010 Boeken
Berichten
|