1 / 24

Herhaling: For, While en Do

Herhaling: For, While en Do. Hoofdstuk 8. In dit hoofdstuk …. In elke programmeertaal bestaat de mogelijkheid om herhalingen of lussen uit te voeren VB.NET: For, While en Do. For. Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _

illias
Download Presentation

Herhaling: For, While en Do

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Herhaling:For, While en Do Hoofdstuk 8

  2. In dit hoofdstuk … • In elke programmeertaal bestaat de mogelijkheid om herhalingen of lussen uit te voeren • VB.NET: For, While en Do Visual Basic.NET voor studenten

  3. For Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click End Sub Dim number As Integer TextBox1.Clear() For number = 1 To 10 TextBox1.AppendText( _ CStr(number) & NewLine) Next Visual Basic.NET voor studenten

  4. For • De body van de lus wordt herhaaldelijk uitgevoerd • Nieuwe methoden • TextBox1.Clear() • TextBox1.AppendText(…) • Nieuwe properties • NewLine, Tab • Imports Microsoft.VisualBasic.ControlChars • Is ControlChars een namespace of een class? • Welke andere constanten zijn nog gedefinieerd? • Waarom zou je beter niet met de codes zelf werken? • Demo: • Gebruik de debugger om de lus te volgen • Een andere (primitievere) trucMessageBox.Show(CStr(number)) Visual Basic.NET voor studenten

  5. For: stroomdiagram lusvariabele = beginwaarde [lusvariabele <= limiet] Body Ophogen lusvariabele Visual Basic.NET voor studenten

  6. For • Beschouw volgend stukje code, hoeveel keer wordt de lus uitgevoerd? For number = 1 To 10 TextBox1.AppendText(CStr(number) & NewLine) number = 10 Next Visual Basic.NET voor studenten

  7. For: conclusie • Gebruik een For-lus als je op voorhand weet hoeveel keer de body moet uitgevoerd worden • De “lusvariabele” (number) zou nooit mogen veranderd worden in de body • Hiervoor bestaat de While lus! • De “lusvariabele” mag wel gelezen / geraadpleegd worden Visual Basic.NET voor studenten

  8. For: varianten • Zoek in de Help van Visual Studio • Hoe kan je het programma “1 To 10” veranderen, zodat het in stappen van 5 springt? Dus de uitvoer wordt: 0, 5, 10 • Hoe kan je het programma “1 To 10” veranderen, zodat het van 10 naar 1 aftelt? • Beschouw het programma “boxes”. Hoeveel keer wordt de body van de For lus uitgevoerd, als je de slider vanaf uiterst links, 7 stappen naar rechts beweegt? Visual Basic.NET voor studenten

  9. While • Een While lus kan je gebruiken om herhalingen uit te voeren waarbij de lusvoorwaarde veel vrijer te bepalen is door de programmeur • Voorbeelden: • Zolang als een variabele < 10, doe je … • Zolang als een invoerveld niet is ingevuld, doe je … • Zolang als de grootte van een bestand < 10kB, doe je … • Zolang als je een woord niet hebt gevonden in een tekst, doe je … • In een While lus is het aantal iteraties (herhalingen) dus niet op voorhand bepaald! Visual Basic.NET voor studenten

  10. While: voorbeeld • Per tegel verdubbelt het aantal graankorrels • Op de hoeveelste tegel heb ik in totaal honderd graankorrels (of meer)? Visual Basic.NET voor studenten

  11. While Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim square, rice, total As Integer square = 1 rice = 1 total = 1 DisplayCounts(square, rice) While total < 100 square = square + 1 rice = rice * 2 DisplayCounts(square, rice) total = total + rice End While TextBox1.AppendText(NewLine & _ "Number of squares to make total of 100 is " & _ square) End Sub While total < 100 square = square + 1 rice = rice * 2 DisplayCounts(square, rice) total = total + rice End While Visual Basic.NET voor studenten

  12. While Private Sub DisplayCounts(ByVal square As Integer, _ ByVal rice As Integer) TextBox1.AppendText("On square " & square & _ " are " & rice & " grains" & NewLine) End Sub • Hoeveel keer wordt de body van de while lus uitgevoerd? • Verander het programma, zodat het aantal rijstkorrels kan ingegeven worden door de gebruiker. Visual Basic.NET voor studenten

  13. While • Elke while lus bestaat uit de volgende componenten • Initialisatie vóór de lus (total = 1) • Stopvoorwaarde (total < 100) • Opdrachten die de stopvoorwaarde beïnvloeden (total = total + rice) • Typische fouten • Te weinig iteraties (bv: count < 10 of count <= 10) • Oneindige lussen (bv: vergeten count te verhogen) Visual Basic.NET voor studenten

  14. And, Or, Not • Net zoals bij de If structuur kunnen deze operatoren gebruikt worden om ingewikkelde stopcondities te maken • Haakjes! Visual Basic.NET voor studenten

  15. Do … Loop • Deze herhalingsstructuur laat toe om de betekenis van de stopconditie te variëren • Ofwel itereren “zolang als een voorwaarde waar is” • Ofwel itereren “totdat een voorwaarde waar geworden is” Visual Basic.NET voor studenten

  16. Do … Loop Dim count As Integer TextBox1.Clear() count = 0 Do While count <= 9 TextBox1.AppendText(CStr(count)) count = count + 1 Loop Deze fragmenten doen identiek hetzelfde! Dim count As Integer TextBox1.Clear() count = 0 Do Until count = 10 TextBox1.AppendText(CStr(count)) count = count + 1 Loop Visual Basic.NET voor studenten

  17. Do … Loop • Deze herhalingsstructuur laat toe om de plaats van de stopconditie te variëren • Voor elke iteratie evalueren (de lus begint dus met een test) • Na elke iteratie evalueren (de lus begint dus met statements) Visual Basic.NET voor studenten

  18. Do … Loop Dim count As Integer TextBox1.Clear() count = 0 Do TextBox1.AppendText(CStr(count)) count = count + 1 Loop While count <= 9 Deze fragmenten doen identiek hetzelfde! Dim count As Integer TextBox1.Clear() count = 0 Do While count <= 9 TextBox1.AppendText(CStr(count)) count = count + 1 Loop Visual Basic.NET voor studenten

  19. Bemerking • Elke lus kan herschreven worden door middel van een while lus • Hiervoor bestaat een formeel wiskundig bewijs. • Waarom dan zoveel lus varianten? • Kortere schrijfwijze, bv een For is korter dan een While • Persoonlijke voorkeur • Soms lijkt code duidelijker als ze met de ene of andere variant is geschreven • TIP: werk zoveel mogelijk met For, vervolgens zoveel mogelijk met While en vermijd de varianten van Do … Loop Visual Basic.NET voor studenten

  20. Geneste lussen Private Sub DrawFlats(ByVal floors As Integer, _ ByVal flats As Integer) Dim x, y As Integer Dim floor, flat As Integer Dim paper As Graphics paper = PictureBox1.CreateGraphics() paper.Clear(Color.White) Dim myPen As Pen = New Pen(Color.Black) y = 10 For floor = 0 To floors x = 10 For flat = 0 To flats paper.DrawRectangle(myPen, x, y, 10, 5) x = x + 15 Next y = y + 15 Next End Sub Indentatie  leesbaarheid! Visual Basic.NET voor studenten

  21. Geneste lussen • Als je dergelijke oefeningen zelf moet opstellen, denk je vaak best “bottom up” • DrawOneFlat() code om één flat te tekenen van n verdiepingen • Dit is dus een simpeler probleem • Herhaal de vorige methode voor het gevraagde aantal flats • Als je methodes gebruikt, bevordert dit eveneens de leesbaarheid Visual Basic.NET voor studenten

  22. Geneste lussen Private Sub DrawOneFlat(ByVal floors As Integer, _ ByVal startX As Integer, _ ByVal paper As Graphics) Dim floor As Integer Dim myPen As Pen = New Pen(Color.Black) Dim y As Integer = 10 For floor = 0 To floors paper.DrawRectangle(myPen, startX, y, 10, 5) y = y + 15 Next End Sub Visual Basic.NET voor studenten

  23. Geneste lussen Private Sub DrawFlats(ByVal floors As Integer, _ ByVal flats As Integer) Dim x, y As Integer Dim floor, flat As Integer Dim paper As Graphics paper = PictureBox1.CreateGraphics() paper.Clear(Color.White) Dim myPen As Pen = New Pen(Color.Black) x = 10 For flat = 0 To flats DrawOneFlat(floors, x, paper) x = x + 15 Next End Sub Visual Basic.NET voor studenten

  24. Combineren van controlestructuren • Bestudeer het programma: “bouncing ball” • Waarom verschijnt er een “spoor” van de bal? Je ziet a.h.w. zeer veel ballen … • Verander dit programma, zodat je effectief één bal ziet stuiteren • Hint: Timer Visual Basic.NET voor studenten

More Related