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.4. Herhalingen met Do Until ... Loop

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.4.1. Do While ... Loop

Hieronder een voorbeeld van een iteratie structuur waar we de getallen 1 tot en met 10 op de console brengen :
Visual Basic 2012 Broncode - Codevoorbeeld 27
Module DoWhileLoopExample
    Sub Main()
        Dim value As Integer
        '
        Do While value < 10
            value = value + 1
            Console.WriteLine(value)
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
1
2
3
4
5
6
7
8
9
10

2.4.2. Do Until ... Loop

Een andere variant bruikbaar in een iteratiestructuur is de Do Until voorwaarde ... Loop structuur, hier wordt de body van de lus uitgevoerd totdat aan de voorwaarde is voldaan, of dus zolang niet aan de voorwaarde is voldaan :
Visual Basic 2012 Broncode - Codevoorbeeld 28
Module DoUntilLoopExample1
    Sub Main()
        Dim value As Integer
        '
        Do Until value >= 10
            value = value + 1
            Console.WriteLine(value)
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
1
2
3
4
5
6
7
8
9
10

2.4.3. Do ... Loop While ... en Do ... Loop Until ...

Naast de Do While ... Loop en de Do Until ... Loop varianten is het ook mogelijk de voorwaarde op het einde te plaatsen : Do ... Loop While ... en Do ... Loop Until ....  Deze hebben als groot verschil dat de body van de lus minimaal 1 keer wordt uitgevoerd.  Wat niet perse het geval zal zijn als die voorwaarde vooraan staat.

Hieronder zie je algoritmes die ook de getallen 1 tot en met 10 op de console brengt, maar dan met de voorwaarde achteraan gedefinieerd.
Visual Basic 2012 Broncode - Codevoorbeeld 29
Module DoLoopWhileExample
    Sub Main()
        Dim value As Integer
        '
        Do
            value = value + 1
            Console.WriteLine(value)
        Loop While value < 10
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
1
2
3
4
5
6
7
8
9
10
Visual Basic 2012 Broncode - Codevoorbeeld 30
Module DoLoopUntilExample1
    Sub Main()
        Dim value As Integer
        '
        Do
            value = value + 1
            Console.WriteLine(value)
        Loop Until value >= 10
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
1
2
3
4
5
6
7
8
9
10
Merk op dat als men een While versie omzet naar een Until versie of omgekeerd, men de voorwaarde moet gaan kantelen.  Bijvoorbeeld "zolang een getal kleiner is of gelijk is aan 10" heeft als voorwaarde getal <= 10.
Een getal is niet <= 10, slechts wanneer het groter is dan 10.  Dus de Until versie is "totdat getal > 10".

Stel : men wenst aan de gebruiker van het programma te vragen hoeveel getallen er op de console moeten komen, waarna het programma startende bij 1 alle volgende gehele getallen afdrukt tot het door de gebruiker opgegeven aantal bereikt is.
Visual Basic 2012 Broncode - Codevoorbeeld 31
Module DoLoopUntilExample2
    Sub Main()
        Console.WriteLine("Highest Value ?")
        Dim highest As Integer = Console.ReadLine()
        '
        Console.WriteLine("Row :")
        Dim value As Integer
        Do
            value = value + 1
            Console.WriteLine(value)
        Loop Until value >= highest
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Highest Value ?
5
Row :
1
2
3
4
5
Het programma functioneert echter niet goed wanneer de gebruiker 0 invoert.  Hierbij wordt toch een "Row" met 1 als resultaat gegeven, terwijl men hier echter een lege reeks zou verwachten.
Console Application Output
Highest Value ?
0
Row :
1
Door de afbreekvoorwaarde vooraan te plaatsen voldoet het programma volledig aan de vooropgestelde vereisten.
Visual Basic 2012 Broncode - Codevoorbeeld 32
Module DoUntilLoopExample2
    Sub Main()
        Console.WriteLine("Highest Value ?")
        Dim highest As Integer = Console.ReadLine()
        '
        Console.WriteLine("Row :")
        Dim value As Integer
        Do Until value >= highest
            value = value + 1
            Console.WriteLine(value)
        Loop
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Highest Value ?
5
Row :
1
2
3
4
5
Console Application Output
Highest Value ?
0
Row :
Stel dat we een programma wensen die herhaaldelijk om een getal vraagt tot een getal wordt ingevoerd die groter is of gelijk aan nul.
Dan kunnen we als volgt tewerk gaan :
Visual Basic 2012 Broncode - Codevoorbeeld 33
Module DoLoopUntilExample3
    Sub Main()
        Dim value As Integer
        '
        Do
            Console.Write("Enter a Value (0 or more) : ")
            value = Console.ReadLine()
        Loop Until value >= 0
        '
        Console.WriteLine("Correct Entered Value : " & value)
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Enter a Value (0 or more) : -8
Enter a Value (0 or more) : -2
Enter a Value (0 or more) : 0
Correct Entered Value : 0
Console Application Output
Enter a Value (0 or more) : -3
Enter a Value (0 or more) : 5
Correct Entered Value : 5
Console Application Output
Enter a Value (0 or more) : 0
Correct Entered Value : 0
Bemerkt dat hier de afbreekvoorwaarde achteraan staat.  We wensen immer dat hier steeds minstens één getal wordt ingevoerd.

Hadden we nu de afbreekvoorwaarde vooraan geplaatst dan geeft dit niet het gewenste effect :
Visual Basic 2012 Broncode - Codevoorbeeld 34
Module DoUntilLoopExample3
    Sub Main()
        Dim value As Integer
        '
        Do Until value >= 0
            Console.Write("Enter a Value (0 or more) : ")
            value = Console.ReadLine()
        Loop
        '
        Console.WriteLine("Correct Entered Value : " & value)
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Correct Entered Value : 0
We krijgen hier meteen als output, zonder dat we een getal hebben ingevoerd, dat de ingevoerde waarde nul is.  Wat uiteraard niet klopt.

2.4.4. Oefeningen

Opgave :
Maak een programma om een totaal aantal seconden om te zetten naar een formaat uitgedrukt in aantal dagen, aantal uren, aantal minuten en aantal seconden.

Het omzetten wordt herhaald zolang een getal verschillend van 0 wordt ingevoerd.

Bij het invoeren van een negatieve waarde, geeft het programma een foutmelding.

Zorg ervoor dat je programma (met dezelfde input) exact dezelfde uitvoer geeft als onderstaand programmaverloop toont.

Let er op dat nergens in het resultaat "0 days", "0 hours", "0 minutes" of "0 seconds" wordt opgenomen.
Console Application Output
Seconds ?
-1
Error : Only positive values are accepted !
Seconds ?
1000000
Result :
11 days
13 hours
46 minutes
40 seconds
Seconds ?
999960
Result :
11 days
13 hours
46 minutes
Seconds ?
49600
Result :
13 hours
46 minutes
40 seconds
Seconds ?
2800
Result :
46 minutes
40 seconds
Seconds ?
2760
Result :
46 minutes
Seconds ?
0
End.
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 35
Module DoLoopExercise1
    Sub Main()
        Dim totalSeconds, remainingSeconds As Integer
        Dim days, hours, minutes, seconds As Integer
        '
        Do
            Console.WriteLine("Seconds ?")
            totalSeconds = Console.ReadLine()
            If totalSeconds = 0 Then
                Console.WriteLine("End.")
            Else
                If totalSeconds < 0 Then
                    Console.WriteLine("Error : " &
                                      "Only positive values are accepted !")
                Else
                    remainingSeconds = totalSeconds
                    days = remainingSeconds \ 86400
                    remainingSeconds = remainingSeconds - days * 86400
                    hours = remainingSeconds \ 3600
                    remainingSeconds = remainingSeconds - hours * 3600
                    minutes = remainingSeconds \ 60
                    seconds = remainingSeconds - minutes * 60
                    Console.WriteLine("Result :")
                    If days > 0 Then
                        Console.WriteLine(days & " days")
                    End If
                    If hours > 0 Then
                        Console.WriteLine(hours & " hours")
                    End If
                    If minutes > 0 Then
                        Console.WriteLine(minutes & " minutes")
                    End If
                    If seconds > 0 Then
                        Console.WriteLine(seconds & " seconds")
                    End If
                End If
            End If
        Loop Until totalSeconds = 0
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Maak een programma om een reeks (met ongedefinieerde lengte) van gehele getallen verschillend van 0 op te tellen.

Het aantal getallen dat wordt opgeteld is niet vastgelegd, in onderstaand voorbeeld zijn dit er 5, maar dit kunnen er ook 10 zijn , of 20, of 1, ... .

Zorg ervoor dat uw oplossing exact verloopt (met dezelfde input) zoals in onderstaand programmaverloop wordt gedemonstreerd.
Console Application Output
1
+
2
+
3
+
4
+
5
+
0
=
15
Console Application Output
0
=
0
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 36
Module DoLoopExercise2
    Sub Main()
        Dim number, sum As Integer
        '
        number = Console.ReadLine()
        Do Until number = 0
            Console.WriteLine("+")
            sum = sum + number
            number = Console.ReadLine()
        Loop
        Console.WriteLine("=")
        Console.WriteLine(sum)
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Maak een programma om een reeks (met ongedefinieerde lengte) van gehele getallen op te tellen of af te trekken.

Het aantal getallen in de berekening is niet vastgelegd.

We gaan er voor de eenvoud vanuit dat steeds correct operatoren (+, - of =) worden ingevoerd.  Je hoeft hierop dus geen controle toe te passen.

Zorg ervoor dat uw oplossing exact verloopt (met dezelfde input) zoals in onderstaand programmaverloop wordt gedemonstreerd.
Console Application Output
1
=
1
Console Application Output
1
+
2
=
3
Console Application Output
1
-
-5
=
6
Console Application Output
1
+
2
-
3
-
4
+
5
-
0
+
0
=
1
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 37
Module DoLoopExercise3
    Sub Main()
        Dim number, result As Integer
        Dim operatorSymbol As String
        '
        result = Console.ReadLine()
        operatorSymbol = Console.ReadLine()
        Do Until operatorSymbol = "="
            number = Console.ReadLine()
            If operatorSymbol = "+" Then
                result = result + number
            Else
                If operatorSymbol = "-" Then
                    result = result - number
                End If
            End If
            operatorSymbol = Console.ReadLine()
        Loop
        Console.WriteLine(result)
        '
        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.