Les 3 Basisbouwstenen (deel 2) Programmeren met Visual Basic Karl Moens
Programmeren met Visula Basic – Les 3 Overzicht Oplossing van de vorige oefeningen Basisbouwstenen: Lussen –Principes –Do... Loop –For... Next –For Each... Next Oefeningen
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen Eenvoudige rekenmachine Voorzie twee invoervakken en één uitvoervak, zodanig dat de 4 hoofdbewerkingen op de waarden in de invoervakken kunnen worden toegepast en het resultaat in het uitvoervak verschijnt. –Invoervakken: standaard tekstvak met "tabindex 1 en 2" –Uitvoervak: standaard tekstvak met "Locked = False" (er kan dan geen invoer in dit vak plaatsvinden) –4 keuzerondjes om de keuze tussen de 4 hoofdbewerkingen aan te geven –"=" commandknop om de bewerking uit te voeren
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen Koppel volgende programmacode aan de "=" knop (Click-event): If optPlus.Value = True Then txtResultaat.Text = Str(Val(txtWaarde1.Text) + Val(txtWaarde2.Text)) ElseIf optMin.Value = True Then txtResultaat.Text = Str(Val(txtWaarde1.Text) - Val(txtWaarde2.Text)) ElseIf optMaal.Value = True Then txtResultaat.Text = Str(Val(txtWaarde1.Text) * Val(txtWaarde2.Text)) Else txtResultaat.Text = Str(Val(txtWaarde1.Text) / Val(txtWaarde2.Text)) End If
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen "RPN"-rekenmachine Ontwerp een rekenmachine die volgens de RPN- principes werkt. 4 tekstvakken (deze stellen de "stack" voor; de drie bovenste zijn "locked", de onderste niet) Commandbuttons: –"ENTER"-knop (= bevestiging invoer) –knoppen voor de 4 hoofdbewerkingen –(eventueel) "DOWN"-knop (= stack naar beneden halen) en "X Y"-knop (= X en Y registers verwisselen)
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen –In een algemene module (*.bas-file) volgende algemene code invoeren: Public Sub StackUp() Les2_RPNCalculator.txtStackT.Text = Les2_RPNCalculator.txtStackZ.Text Les2_RPNCalculator.txtStackZ.Text = Les2_RPNCalculator.txtStackY.Text Les2_RPNCalculator.txtStackY.Text = Les2_RPNCalculator.txtStackX.Text End Sub Deze subroutine "schuift" de gegevens in de registers naar boven: T Z Y X
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen Public Sub StackDown() Les2_RPNCalculator.txtStackX.Text = Les2_RPNCalculator.txtStackY.Text Les2_RPNCalculator.txtStackY.Text = Les2_RPNCalculator.txtStackZ.Text Les2_RPNCalculator.txtStackZ.Text = Les2_RPNCalculator.txtStackT.Text End Sub Deze subroutine "schuift" de gegevens in de registers naar beneden: X Y Z T
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen Public Sub SwitchXY() Dim strTemp As String strTemp = Les2_RPNCalculator.txtStackX.Text Les2_RPNCalculator.txtStackX.Text = Les2_RPNCalculator.txtStackY.Text Les2_RPNCalculator.txtStackY.Text = strTemp End Sub Deze subroutine verwisselt de gegevens in de X en Y registers: X Y Opgelet: er wordt hierbij een hulpvariabele (strTemp) gebruikt!
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen Deze drie subroutines volstaan om alle gebruikelijke bewerkingen met de stapelgeheugens uit te voeren. Opgelet: aangezien deze algemene module gebruik maakt van objecten uit een andere module moet de volledige naam van deze objecten worden gebruikt: Les2_RPNCalculator.txtStackX i.p.v. txtStackX
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen In de form-module wordt aan de click-event van de command-knoppen de volgende code verbonden: "ENTER" StackUp "DOWN" StackDown " X Y" SwitchXY
Programmeren met Visula Basic – Les 3 Oplossing van de oefeningen De knoppen voor de hoofdbewerkingen krijgen de volgende code: Private Sub cmdPlus_Click() Dim strResultaat As String strResultaat = Str(Val(txtStackX.Text) + Val(txtStackY.Text)) StackDown txtStackX.Text = strResultaat End Sub Deze bewerking aanpassen voor de andere knoppen.
Programmeren met Visula Basic – Les 3 Lussen – Principes Nut: het herhaaldelijk uitvoeren van een reeks instructies Soorten: –onbeperkt herhalende lussen: deze lussen hebben geen voorziening om te eindigen zolang het programma loopt (worden verder niet besproken) –begrensde lussen: deze lussen eindigen indien aan een bepaalde voorwaarde al dan niet is voldaan
Programmeren met Visula Basic – Les 3 Lussen – Principes Onderdelen: –Beginpunt: plaats waar de lus begint. –Eindpunt: plaats waar de lus eindigt en terug naar het beginpunt wordt gestuurd. –Eindvoorwaarde: een test die bepaalt of de lus al dan niet wordt beëindigd. Deze test bevindt zich ergens tussen beginpunt en eindpunt. –"Body" van de lus: instructies die herhaaldelijk worden uitgevoerd
Programmeren met Visula Basic – Les 3 Lussen – Principes Beginpunt Eindpunt Test & Instructies Vervolg
Programmeren met Visula Basic – Les 3 Lussen – Principes Plaats van de eindvoorwaarde-test -Onmiddellijk na het beginpunt -De lus kan reeds worden beëindigd vooraleer er enige instructie is uitgevoerd -Onmiddellijk vóór het eindpunt -De instructies worden minstens eenmaal uitgevoerd -In de "body" -Een deel van de instructies wordt minstens eenmaal uitgevoerd; een andere deel wordt misschien nooit uitgevoerd. -Een combinatie van bovenstaande mogelijkheden.
Programmeren met Visula Basic – Les 3 Lussen – Principes De meest primitieve vorm van een lus bestaat uit: –een "label" (het beginpunt) –een sprongopdracht ("goto label" = het eindpunt) –een test ("if.. then") die al dan niet de sprongopdracht aanstuurt Dergelijke lussen zijn moeilijk te herkennen, moeilijk te controleren en geven snel aanleiding tot fouten. (zie Les3A)
Programmeren met Visula Basic – Les 3 Lussen – Do … Loop De gestructureerde lus: DoBeginpunt […instructies] If … Then Exit Dotest om de lus te verlaten […instructies] LoopEindpunt Het is onmiddellijk duidelijk waar de lus begint en eindigt en waar de test staat die de lus bestuurt. (zie Les3B)
Programmeren met Visula Basic – Les 3 Lussen – Do … Loop Bijzondere vormen –eindvoorwaarde-test aan het begin of het einde van de lus. I.p.v. de "Exit Do" kan dan gebruik worden gemaakt van de "While" of "Until" test. "While": de lus gaat verder zolang de "While" voorwaarde "True" is. "Until": de lus stopt wanneer de "Until" voorwaarde "True" is.
Programmeren met Visula Basic – Les 3 Lussen – Do … Loop –Voorbeeld (zie Les3C) Do While intTeller < 1000 … Loop of Do Until intTeller >= 1000 … Loop Bemerk de logische omkering van de test!
Programmeren met Visula Basic – Les 3 Lussen – Do … Loop –Indien de "While/Until"-test aan de "Do" wordt gekoppeld kan de lus worden afgebroken vooraleer enige instructie wordt uitgevoerd. –Indien de "While/Until" test aan de "Loop" wordt gekoppeld, worden de instructies in de lus minstens eenmaal uitgevoerd. –In eenzelfde Do … Loop kan tegelijk een"While" of "Until"-voorwaarde aan de "Do" worden gekoppeld, een "While" of "Until"- voorwaarde aan de "Loop" worden gehecht en één of meerdere "Exit Do" instructies in de "Body" worden voorzien.
Programmeren met Visula Basic – Les 3 Lussen – For … Next Een bijzondere vorm van een lus, te gebruiken wanneer men van bij het begin van de lus reeds weet hoeveel maal de lus moet worden doorlopen. For teller = beginwaarde To eindwaarde [Step stap] [instructies] [Exit For] [instructies] Next [teller]
Programmeren met Visula Basic – Les 3 Lussen – For … Next De "For"-instructie: initialiseert de teller met de beginwaarde test de teller t.o.v. de eindwaarde; de lus eindigt indien –teller >= eindwaarde (stap>=0) of –teller <= eindwaarde (stap <0) De "Next"-instructie telt de waarde van stap op bij teller. (Zie Les3D)
Programmeren met Visula Basic – Les 3 Lussen – For Each … Next Zoals een "For … Next"-lus, maar met een impliciete "teller" die alle elementen van een Collectie-object of een array doorloopt. For Each variabele In groep [instructies] [Exit For] [instructies] Next [variabele] Opmerking: Variabele moet een Variant zijn!
Programmeren met Visula Basic – Les 3 Lussen – For Each … Next De instructies van de lus worden eenmaal uitgevoerd voor elk element van de groep, tenzij de lus voortijdig wordt verlaten met de "Exit For"- instructie.
Programmeren met Visula Basic – Les 3 Lussen – Nesting Een lus kan een andere lus omvatten: dit wordt het "nesten" van lussen genoemd. Opletten voor het "kruisen" van lussen: dit geeft een fout bij het uitvoeren!
Programmeren met Visula Basic – Les 3 Lussen – Oefeningen 1.Maak een "Do … Loop"- lus die op exact dezelfde wijze werkt als een "For … Next"-lus 2.Test de verwerkingssnelheid van de verschillende vormen van lussen (primitieve lus, Do … Loop (Exit Do, While, Until), For … Next), zowel interpretatief als gecompileerd en bespreek de verschillen.