Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

7.2. Lineair Zoeken in Arrays

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 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 2012 Broncode - Codevoorbeeld 111
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
            ' linear search
            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
            ' output
            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 Sub
End Module
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. Oefening

Opgave :

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 2012 Broncode - Codevoorbeeld 112
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()
        '
        ' ... (linear search) ...
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Zip Code ?
2000
Antwerp
Console Application Output
Zip Code ?
4000
City not found.
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 113
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 Sub
End Module

7.2.2. Voorgedefinieerde Zoekmethoden

Men 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 2012 Broncode - Codevoorbeeld 114
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)                         ' (1)
            Dim found As Boolean = index > -1
            ' output
            If found Then
                Console.WriteLine(number & " found at index " & index)
            Else
                Console.WriteLine(number & " not found")
            End If
        Next
        '
        Console.ReadLine()
    End Sub
End Module
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 maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.