|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
De eenvoudigste methode om een waarde op te zoeken in een array, is het simpelweg element per element overlopen van de array tot je de waarde gevonden hebt of tot je kan concluderen dat de waarde zich niet in de array bevindt.
Dit is wat men noemt het lineair zoeken. Hierin gaat men op iteratieve wijze de elementen in een bepaalde volgorde ( van voor naar achter, van achter naar voor of een andere volgorde ) zal benaderen en element per element controleren of het overeenkomt met de te zoeken waarde. De iteratieve benadering kan beëindigd worden vanaf de waarde gevonden is of indien de volledige collectie doorzocht is.
In onderstaand algoritme gaan we in een tabel ( opgevuld met de veelvouden van 2 ) opzoek naar verschillende waarden.
Het algoritme zal weergeven of de waarde gevonden wordt, indien gevonden wordt de positie ( de index ) van dit element weergegeven. Er wordt ook weergeven of de volledige tabel doorzocht werd. Visual Basic 2010 Broncode Module LinearSearch Sub Main() Dim base As Integer = 2 Dim count As Integer = 10 Dim upperbound As Integer = count - 1 Dim numbers(upperbound) As Integer Dim index As Integer For index = 0 To upperbound numbers(index) = (index + 1) * base Next Dim number As Integer For number = base - 1 To base * count + 1 Dim found As Boolean = False Dim exhausted As Boolean = False index = -1 Do Until found OrElse exhausted index += 1 found = (numbers(index) = number) exhausted = (index = upperbound) Loop If found Then Console.Write(number & " found at index " & index) Else Console.Write(number & " not found") End If If exhausted Then Console.WriteLine( ", search exhausted") Else Console.WriteLine( ", search not exhausted") End If Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output 1 not found, search exhausted
2 found at index 0, search not exhausted
3 not found, search exhausted
4 found at index 1, search not exhausted
5 not found, search exhausted
6 found at index 2, search not exhausted
7 not found, search exhausted
8 found at index 3, search not exhausted
9 not found, search exhausted
10 found at index 4, search not exhausted
11 not found, search exhausted
12 found at index 5, search not exhausted
13 not found, search exhausted
14 found at index 6, search not exhausted
15 not found, search exhausted
16 found at index 7, search not exhausted
17 not found, search exhausted
18 found at index 8, search not exhausted
19 not found, search exhausted
20 found at index 9, search exhausted
21 not found, search exhausted 7.2.1. OefeningOpgave :
Maak een programma dat via de "linear search" methode op basis van een postcode op zoek gaat naar de gerelateerde gemeente.
Doe dit door onderstaande programma-code te vervolledigen. Visual Basic 2010 Broncode Module ExerciseTask Sub Main() Dim count As Integer = 3 Dim names() As String = { "Brussels", "Antwerp", "Ghent"} Dim zipCodes() As Integer = {1000, 2000, 9000} Console.WriteLine( "Zip Code ?") Dim zipCode As String = Console.ReadLine() Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Zip Code ?
2000
Antwerp Console Application Output Zip Code ?
4000
City not found. Oplossing : Visual Basic 2010 Broncode Module ExerciseSolution Sub Main() Dim count As Integer = 3 Dim names() As String = { "Brussels", "Antwerp", "Ghent"} Dim zipCodes() As Integer = {1000, 2000, 9000} Console.WriteLine( "Zip Code ?") Dim zipCode As String = Console.ReadLine() Dim found, exhausted As Boolean Dim index As Integer = -1 Do Until found OrElse exhausted index += 1 found = (zipCodes(index) = zipCode) exhausted = (index = count - 1) Loop If found Then Console.WriteLine(names(index)) Else Console.WriteLine( "City not found.") End If Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
boven
7.2.2. Voorgedefinieerde ZoekmethodenMen kan ook van voorgedefinieerde functionaliteiten gebruik maken om een waarde in een tabel te gaan opzoeken (1).
De shared function IndexOf van de klasse Array zal in de tabel ( eerste argumentwaarde ) de eerste positie van de waarde ( tweede argumentwaarde ) opleveren. Wordt de waarde niet gevonden dan levert deze function -1 op. Visual Basic 2010 Broncode Module IndexOf Sub Main() Dim base As Integer = 2 Dim count As Integer = 10 Dim upperbound As Integer = count - 1 Dim numbers(upperbound) As Integer Dim index As Integer For index = 0 To upperbound numbers(index) = (index + 1) * base Next Dim number As Integer For number = base - 1 To base * count + 1 index = Array.IndexOf(numbers, number) Dim found As Boolean = index > -1 If found Then Console.WriteLine(number & " found at index " & index) Else Console.WriteLine(number & " not found") End If Next Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output 1 not found
2 found at index 0
3 not found
4 found at index 1
5 not found
6 found at index 2
7 not found
8 found at index 3
9 not found
10 found at index 4
11 not found
12 found at index 5
13 not found
14 found at index 6
15 not found
16 found at index 7
17 not found
18 found at index 8
19 not found
20 found at index 9
21 not found
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|