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

2.5. Herhalingen met For ... Next

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.

2.5.1. For ... Next

Naast de Do ... Loop iteratiestructuren bestaat er ook nog een For ... Next iteratiestructuur.  Bij het gebruik van deze structuur ga je niet rechtstreeks een voorwaarde formuleren hoe lang of tot wanneer iets herhaald moet worden, maar ga je eerder een "tellervariabele" over een bepaald bereik laten lopen, om dan per waarde voor die teller de body van die lus te laten herhalen.

Hieronder een voorbeeld waar de getallen 1 tot en met 10 worden afgedrukt :
Visual Basic 2012 Broncode - Codevoorbeeld 38
Module ForNextExample1
    Sub Main()
        Dim value As Integer
        '
        For value = 1 To 10
            Console.WriteLine(value)
        Next
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
1
2
3
4
5
6
7
8
9
10
De body van de lus wordt dus herhaald voor iedere waarde de tellervariabele ( value) aanneemt.  Startende bij 1, steeds verhogend met 1 tot en met 10 zorgt er dus voor dat de body hier 10 keer zal worden uitgevoerd.

Niet steeds dient de startwaarde 1 te zijn, eender welk geheel getal kan als startwaarde opgegeven worden.
Visual Basic 2012 Broncode - Codevoorbeeld 39
Module ForNextWithStartValueOtherThan1Example
    Sub Main()
        Dim value As Integer
        '
        For value = 10 To 15
            Console.WriteLine(value)
        Next
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
10
11
12
13
14
15
By default is de stapwaarde 1, en zal de teller variabele dus met 1 worden verhoogd per uitvoering van de body.  Maar ook hiervan kan men afwijken, dit kan door een optionele Step clausule op te nemen, waar na het keyword Step een Integer expressie wordt geplaatst die de alternatieve stapwaarde aangeeft.
Visual Basic 2012 Broncode - Codevoorbeeld 40
Module ForNextWithStepValueExample
    Sub Main()
        Dim value As Integer
        '
        For value = 2 To 10 Step 2
            Console.WriteLine(value)
        Next
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
2
4
6
8
10
Definieert men geen Step clausule (of by default dus) dan moet je er dus Step 1 bij denken.

Ook negatieve stapwaarden zijn mogelijk.  Hierbij dient men opletten dat de startwaarde hoger moet zijn dan de eindwaarde, doet men dit niet dan zal de body van de lus nooit worden uitgevoerd.
Visual Basic 2012 Broncode - Codevoorbeeld 41
Module ForNextWithNegativeStepValueExample
    Sub Main()
        Dim value As Integer
        '
        For value = 10 To 0 Step -2
            Console.WriteLine(value)
        Next
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
10
8
6
4
2
0
Ook niet gehele getallen als start-, eind- en stap waarde zijn mogelijk, maar dan moet de tellervariabele wel van een niet-integer numeriek formaat worden gedeclareerd.

Een groot verschil met de andere iteratiestructuren is dus dat er altijd met een teller wordt gewerkt, en dat deze dan ook nog eens automatisch verhoogd wordt na het uitvoeren van de body van de lus.

In vorige voorbeeld werd de start-, eind- en stap waarde steeds geformuleerd aan de hand van een letterlijke Integer value (een Integer literal).
Maar men kan hiervoor eender welke Integer expressie gebruiken, bijvoorbeeld ook Integer variabelen.
Visual Basic 2012 Broncode - Codevoorbeeld 42
Module ForNextExample2
    Sub Main()
        Dim countValue As Integer
        Dim startValue As Integer = 1
        Dim endValue As Integer = 10
        Dim stepValue As Integer = 2
        '
        Console.WriteLine("values during iteration :")
        For countValue = startValue To endValue Step stepValue
            Console.WriteLine("count value : " & countValue)
            '
            countValue = countValue + 1
            startValue = startValue + 1
            endValue = endValue + 1
            stepValue = stepValue + 1
        Next
        '
        Console.WriteLine("values after iteration :")
        Console.WriteLine("count value : " & countValue)
        Console.WriteLine("start value : " & startValue)
        Console.WriteLine("end value   : " & endValue)
        Console.WriteLine("step value  : " & stepValue)
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
values during iteration :
count value : 1
count value : 4
count value : 7
count value : 10
values after iteration :
count value : 13
start value : 5
end value   : 14
step value  : 6
Als je de output van dit voorbeeld bekijkt, bemerk je dat de start-, eind- en stapwaarden slecht één maal geëvalueerd werden.  Het is dus niet omdat de variabelen die deze waarden uitdrukten van waarde wijzigen tijdens de uitvoering van de iteraties, dat deze gewijzigde waarden zullen worden gebruikt.

Wel kan men de teller waarde aanpassen.

Het wijzigen van die start-, eind- en stapwaarden in de body van de lus werkt hier dus enkele verwarrend.
Dit is dus een voorbeeld van hoe je een For ... Next structuur niet moet gaan gebruiken.

2.5.2. For Each ... Next

Verderop zullen we nog zien hoe men over de elementen van een collectie kan itereren aan de hand van de For Each ... Next iteratiestructuur.

2.5.3. Oefeningen

Opgave :

Maak een programma om de faculteit van een door de gebruiker ingevoerd getal te bepalen.  We gaan er simpelweg vanuit dat de gebruiker een getal invoert die groter is dan 0.

De faculteit van een getal X = X * (X-1) * (X-2) * ... * 1, dus bijvoorbeeld 5! = 5 * 4 * 3 * 2 * 1 = 120.
Console Application Output
Value ?
5
5! = 120
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 43
Module ForNextExercise1
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Dim factorial As Integer = value
        Dim factor As Integer = value - 1
        '
        For factor = value - 1 To 2 Step -1
            factorial = factorial * factor
        Next
        '
        Console.WriteLine(value & "! = " & factorial)
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Breng alle seconden van alle minuten van alle uren in onderstaand formaat op de console.
Console Application Output
00h00m00s
00h00m01s
...
00h00m59s
00h01m00s
...
00h59m59s
01h00m00s
...
23h59m59s
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 44
Module ForNextExercise2
    Sub Main()
        Dim hours, minutes, seconds As Integer
        Dim timeLabel As String
        For hours = 0 To 23
            For minutes = 0 To 59
                For seconds = 0 To 59
                    timeLabel = ""
                    If hours < 10 Then
                        timeLabel = "0"
                    End If
                    timeLabel = timeLabel & hours & "h"
                    If minutes < 10 Then
                        timeLabel = timeLabel & "0"
                    End If
                    timeLabel = timeLabel & minutes & "m"
                    If seconds < 10 Then
                        timeLabel = timeLabel & "0"
                    End If
                    timeLabel = timeLabel & seconds & "s"
                    Console.WriteLine(timeLabel)
                Next
            Next
        Next
        Console.ReadLine()
    End Sub
End Module

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.