|
Dit artikel is gepubliceerd op zondag 31 juli 2011 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application Output Value ?
0
Zero. Console Application Output Value ?
5
Above zero. Console Application 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. Console Application 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 2010 Broncode Module Example2 Sub Main() Dim baseValue As Integer = 1 Do While baseValue < 10 Console.WriteLine(baseValue) baseValue = baseValue + 1 Loop Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 : Console Application 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Console Application 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. OefeningenOpgave :
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. Console Application Output Value ?
3
Value ?
8
Value ?
4
Value ?
-1
Highest Value : 8 Oplossing : Visual Basic 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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. Console Application Output Value ?
-4
Value ?
3
Row :
-3
-2
-1
0
1
2 Console Application Output Value ?
2
Value ?
2
Row : Console Application Output Value ?
2
Value ?
-1
Row :
0
1 Console Application Output Value ?
2
Value ?
3
Row : Oplossing : Visual Basic 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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. Console Application Output Value ?
10
Row :
10
5
16
8
4
2
1 Oplossing : Visual Basic 2010 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|