homeboekenlinksledenabonneer je :Blijf op de hoogte door je te abonneren op de vbvoorbeelden RSS Niews Feed!Blijf op de hoogte door vbvoorbeelden te volgen op Twitter!Blijf op de hoogte door fan te worden van vbvoorbeelden op Facebook!
Visual Basic 2008 en 2010 Voorbeelden en Boeken Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

visual basic 2008 voorbeelden en boeken / visual basic 2010 voorbeelden en boeken

2.3. Geneste Structuren

Print Email Deel op FacebookDeel op TwitterDeel op DiggBookmark op Google BookmarksDeel op del.icio.usOverige Sociale Netwerksites...

Dit artikel is gepubliceerd op woensdag 28 april 2010 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Hier wensen we van een ingevoerd getal op de console te drukken of het getal "Zero.", "More than zero." of "Less than zero." is.

We weten reeds dat we met een selectie structuur op basis van een voorwaarde een situatie in twee deel-situaties kunnen opsplitsen.
Maar hier hebben we drie situaties, een voorwaarde/selectie zal nooit volstaan om het programma te kunnen laten constateren in welk van de drie gevallen het zich nu bevindt.

Maar door een extra selectie structuur in de bovenliggende te gaan nesten, kunnen we bijkomende condities nagaan. Hier wordt dus eerst gecontroleerd of het getal nul is, is dit niet zo gaan we kijken of het groter is dan nul.
Visual Basic Broncode
Module Example1
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        If value = 0 Then
            Console.WriteLine("Zero.")
        Else
            If value > 0 Then
                Console.WriteLine("Above zero.")
            Else
                Console.WriteLine("Below zero.")
            End If
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
Value ?
0
Zero.
Visual Basic Output
Value ?
5
Above zero.
Visual Basic Output
Value ?
-5
Below zero.
Bovenstaand voorbeeld toont hoe een selectie geselecteerd kan worden.

Stel dat we de tafels van de getallen 1 tot en met 9 op de console wensen te drukken drukken.
Visual Basic Output
1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
2 x 1 = 1
...
9 x 9 = 81
Al snel zou je moeten merken dat hier zaken herhaald worden, dus dat we een iteratie structuur hiervoor kunnen gebruiken. Wat wordt hier herhaald?
Er wordt herhaald dat een steeds hoger worden basisgetal (startend bij 1 en stijgend tot 9) wordt vermenigvuldigd met alle factoren van een tot en met negen.

We kunnen beginnen met een lus die alle basisgetallen van 1 tot en met 9 op de console brengt.
Visual Basic Broncode
Module Example2
    Sub Main()
        Dim baseValue As Integer = 1
        '
        Do While baseValue < 10
            Console.WriteLine(baseValue)
            baseValue = baseValue + 1
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
1
2
3
4
5
6
7
8
9
We zitten nu al een stap verder, maar we zijn er uiteraard nog niet. In plaats van het gewoon afdrukken van dat basisgetal, zou dat basisgetal nu herhaaldelijk met een steeds verhogende factor moeten vermenigvuldigd worden, zodat we dat resultaat kunnen afdrukken.

Laten we een versie schrijven die een basisgetal met die getallen vermenigvuldigd.
Visual Basic Broncode
Module Example3
    Sub Main()
        Dim baseValue As Integer = 5
        Dim factor As Integer = 1
        Dim multiplication As Integer
        '
        Do While factor < 10
            multiplication = baseValue * factor
            Console.WriteLine(baseValue & " x " & factor & " = " & _
                              multiplication)
            factor = factor + 1
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
Als we deze twee versies nu integreren, dus daar waar in de eerste versie gewoon het basisgetal op de console wordt geschreven vervangen door de herhaling uit de tweede versie, dan krijgen we :
Visual Basic Broncode
Module Example4
    Sub Main()
        Dim baseValue As Integer = 1
        Dim factor As Integer = 1
        Dim multiplication As Integer
        '
        Do While baseValue < 10
            Do While factor < 10
                multiplication = baseValue * factor
                Console.WriteLine(baseValue & " x " & factor & " = " & _
                                  multiplication)
                factor = factor + 1
            Loop
            baseValue = baseValue + 1
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
Dit is bijna volledig, alleen moeten we er nu nog voor zorgen dat de factor geherinitialiseerd wordt ( opnieuw op 1 wordt gezet ) als er met een nieuw basisgetal wordt begonnen.
Visual Basic Broncode
Module Example5
    Sub Main()
        Dim baseValue As Integer = 1
        Dim factor As Integer = 1
        Dim multiplication As Integer
        '
        Do While baseValue < 10
            Do While factor < 10
                multiplication = baseValue * factor
                Console.WriteLine(baseValue & " x " & factor & " = " & _
                                  multiplication)
                factor = factor + 1
            Loop
            baseValue = baseValue + 1
            factor = 1
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
1 x 1 = 1
1 x 2 = 2
...
1 x 9 = 9
2 x 1 = 1
...
9 x 9 = 81
Wat we uit dit voorbeeld leren is dat een iteratie kunnen itereren.

We weten ondertussen dat we verschillende selecties of iteraties in elkaar kunnen uitschrijven. Maar uiteraard kunnen ook gewoon selecties in iteraties of iteraties in selecties worden gebruikt.

In onderstaand voorbeeld wensen we van de getallen een tot en met tien op de console te drukken of ze even of oneven getallen zijn, dus iets als :
Visual Basic Output
1 is odd.
2 is even.
3 is odd.
4 is even.
5 is odd.
6 is even.
7 is odd.
8 is even.
9 is odd.
10 is even.
We zitten hier duidelijk met iets wat herhaald moet worden ( we moeten dit doen voor de getallen een tot en met tien ) en we zitten ook met een beslissing die moet worden genomen ( is het getal even of oneven ). Dus zowel een iteratie- als selectie structuur zal hier noodzakelijk zijn.

We kunnen ons nu de vraag stellen : is het op basis van de beslissing dat we al dan niet gaan itereren, of is het de beslissing die we gaan herhalen ?
Ik denk dat het hier duidelijk over het tweede gaat. We moeten de beslissing of een getal even is of oneven gaan herhalen voor de getallen een tot en met tien.

We kunnen beginnen met versie die van een getal op de console drukt of het een even of oneven getal is :
Visual Basic Broncode
Module Example6
    Sub Main()
        Dim value As Integer = 5
        '
        If value Mod 2 = 0 Then
            Console.WriteLine(value & " is even.")
        Else
            Console.WriteLine(value & " is odd.")
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
5 is odd.
Die beslissing en bijhorende consequenties uit bovenstaande versie moet nu dus volledig herhaald worden voor de getallen een tot en met 10, dus we schrijven er een lus rond :
Visual Basic Broncode
Module Example7
    Sub Main()
        Dim value As Integer
        '
        Do While value < 10
            value = value + 1
            If value Mod 2 = 0 Then
                Console.WriteLine(value & " is an even number")
            Else
                Console.WriteLine(value & " is an odd number")
            End If
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Visual Basic Output
1 is odd.
2 is even.
3 is odd.
4 is even.
5 is odd.
6 is even.
7 is odd.
8 is even.
9 is odd.
10 is even.
Zoals we bovenstaand voorbeeld zien kan een selectie dus geïtereerd worden, maar natuurlijk kan ook een iteratie selecteren.

Sequenties, selecties en iteraties zijn de drie basisstructuren waarmee men gecombineerd de meest krachtige algoritmes kan opbouwen.

2.3.1. Oefeningen

Opgave :

Maak een programma dat herhaaldelijk vraagt om de invoer van een getal, bij het invoeren van een getal kleiner dan nul wordt het grootst ingevoerde getal op de console gebracht.
Visual Basic Output
Value ?
3
Value ?
8
Value ?
4
Value ?
-1
Highest Value : 8
Oplossing :
Visual Basic Broncode
Module Exercise1Solution
    Sub Main()
        Dim value As Integer
        Dim highestValue As Integer
        '
        Do While value >= 0
            Console.WriteLine("Value ?")
            value = Console.ReadLine()
            '
            If value > highestValue Then
                highestValue = value
            End If
        Loop
        '
        Console.WriteLine("Highest Value : " & highestValue)
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Maak een programma dat alle getallen ( van klein naar groot ) tussen 2 door de gebruiker ingevoerde waarden op de console brengt.
Let op : men weet op voorhand niet welk van de 2 door de gebruiker ingevoerde waarden het grootst is.
Visual Basic Output
Value ?
-4
Value ?
3
Row :
-3
-2
-1
0
1
2
Visual Basic Output
Value ?
2
Value ?
2
Row :
Visual Basic Output
Value ?
2
Value ?
-1
Row :
0
1
Visual Basic Output
Value ?
2
Value ?
3
Row :
Oplossing :
Visual Basic Broncode
Module Exercise2Solution
    Sub Main()
        Dim value1, value2 As Integer
        Dim smallestValue, highestValue As Integer
        '
        Console.WriteLine("Value ?")
        value1 = Console.ReadLine()
        Console.WriteLine("Value ?")
        value2 = Console.ReadLine()
        '
        If value1 > value2 Then
            highestValue = value1
            smallestValue = value2
        Else
            highestValue = value2
            smallestValue = value1
        End If
        '
        Console.WriteLine("Row :")
        Do While smallestValue + 1 < highestValue
            Console.WriteLine(smallestValue + 1)
            smallestValue = smallestValue + 1
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Maak een programma dat een - van 0 verschillend - positief getal inleest.
Als het een even getal is : wordt het door 2 gedeeld en afgedrukt.
Als het een oneven getal is : wordt het met 3 vermenigvuldigd en 1 bij opgeteld en afgedrukt.
Zo bekom je dus een nieuw getal. Herhaal dit totdat je 1 bekomt.
Visual Basic Output
Value ?
10
Row :
10
5
16
8
4
2
1
Oplossing :
Visual Basic Broncode
Module Exercise3Solution
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Console.WriteLine("Row : ")
        Do While value <> 1
            Console.WriteLine(value)
            '
            If value Mod 2 = 0 Then
                value = value / 2
            Else
                value = value * 3 + 1
            End If
        Loop
        Console.WriteLine(value)
        '
        Console.ReadLine()
    End Sub
End Module

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

Het Groene Visual Basic 2008 & 2010 Voorbeelden Boek Het Blauwe Visual Basic 2008 & 2010 Voorbeelden Boek Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek

Bevalt een artikel je, dan kan je de inhoud van vbvoorbeelden ook reclamevrij in boekvorm verkrijgen.

De inhoud is verdeeld over 3 boeken, Het Groene, Het Blauwe en Het Rode Visual Basic 2008 & 2010 Voorbeelden Boek.

Klik hier voor meer informatie.

Berichten

Fast UML Sequence Diagram Editor