Grundlagen der Programmierung: Schlaufen

In Programmiersprachen müssen häufig irgend welche Arbeiten mehrmals abgearbeitet werden. Zum Beispiel die Ausgabe aller Datensätze einer Adressdatenbank. In diesem Fall kommt eine Schlaufe zur Anwendung. Wir kennen folgende Schlaufen

for next

For next ist eine Schlaufe mit einer bekannten Anzahl Durchläufen.

for i = 1 to 10
   beep
next i

Würde zehn mal einen Pipston von sich geben. Dieser wäre vermutlich nicht hörbar weil die töne derart schnell hintereinander folgen, dass das menschliche träge Ohr diese als einen einzigen Ton wahr nehmen würde.

Die folgende Schlaufe i hat eine zweite geschachtelte Schlaufe x welche eine Verzögerung verursacht.

for i = 1 to 10
   beep
   for x = 1 to 100000
   next
next i

Geschwindikeitsmessung mit For-Next

Grundsatz: "Wer misst, der misst Mist".

Der folgende Code kann verwendet werden um die Arbeitsgeschwindigkeit des Prozessors unter der Verwendung unterschiedlicher Variabeldeklarationen zu testen. Die Variabeln v1 und v2 wird unterschiedlich deklariert. Braucht die Zuweisung von Informationen an v1 und v2 nun unterschiedlich viel Zeit wenn v1 und v2 Byte oder long ist?

Sub SpeedTest()
   Dim x As Long
   Dim i As Integer
   Dim v1 as byte
   Dim v2 as byte
   vStart = Time()
   For x = 1 To 100000
      For i = 1 To 254
         v1 = i
         v2 = v1
      Next
   Next
   vEnde = Time()
   Debug.Print "Start:" & vStart
   Debug.Print "Ende :" & vEnde
   Debug.Print "Dauer:" & vEnde - vStart
End Sub

Ersetzen Sie die Zeile: "Dim v1 as byte" und "Dim v2 as byte" mit unterschiedlichen Variabeltypen und füllen sie die folgende Tabelle mit der Ausführungsgeschwindigkeit bei unterschiedlichen Schlaufenanzahlen aus:

Variabeltyp: Arbeitsdauer
100'000 200'000 400'000
byte      
integer      
long      
single      
double      
ohne Deklaration      

Ist die Ausführungszeit bei 200'000 Durchläufen doppelt solange wie bei 100'000? Und wie ist der Faktor bei 400'000 Durchläufen? Ist die erste Zeitmessung identisch mit einer zweiten Zeitmessung?

Problemzonen dieses Testes: a) Die kurze Zeit welche dieses Programm arbeitet ergibt kein genaues Testergebnis. b) Windows wird durch Manipulation des Arbeitsspeichers (Chache) das Testergebnis beeinflussen.

do while

Do while ist eine Schlaufe mit einer unbekannten Anzahl Durchläufen. Das Ende der Schlaufe wird durch eine Bedingung festgelegt. Das Folgende Beispiel prüft ob der Inhalt der Funktion time() kleiner als 11:45 ist. Solange dies der Fall ist (die Bedingung ist wahr) wird die Schlaufe von loop bis do geschlossen und die dazwischen liegenden Befehle abgearbeitet. Ist die Bedingung false, so wird der Befehl nach loop ausgeführt.

do while time()<#11:45#
   print "Arbeiten!"
loop
Print "Mittagszeit"

Im obigen Beispiel kann es vorkommen, dass die Schlaufe nie ausgeführt wird, weil die Bedingung zum Beispiel am Nachmittag nie wahr sein wird. Möchte man jedoch mindestens einen Schlaufendurchlauf erzwingen kann die Bedingung auch ans Schlaufenende gesetzt werden.

do
   print "Arbeiten!"
loop  while time()<#11:45#
Print "Mittagszeit"

while wend

Viele Programmiersprachen kennen die do while Schlaufe nicht, dafür jedoch while wend. Das Funktionsprinzip ist identisch. Mit dem kleinen Unterschied dass bei While wend die Bedingung immer am Beginn der Schlaufe steht (jedenfalls in VB). do while ist also wesentlich besser strukturierbar und ist zu bevorzugen.

while bedingung
   anweisungen
wend

 

Ihre Aufgabe

whit

Die whit-Schlaufe ist ab VB4 und in VBA (mindestens VBA Excel) bekannt. Sie ist in der Lage eine Collection abzuarbeiten. Sind zum Beispiel auf einer Dialogbox mehrere Radio-Buttons, so bezeichnet man diese als eine Collection. Auch alle Checkboxen einer Dialogbox bilden eine Collection. Oder alle Symbolleisten einer Anwendung bilden eine Collection.

So kann nun mit der whit-Schlaufe geprüft werden, welcher Radiobutton einer Collection angeklickt ist. Die Grundsätzliche Schreibweise lautet:

whit objekt
   .Eigenschaft
   .Eigenschaft
end whit

Exit, vorzeitiger Abbruch

Wenn während des abarbeiten einer Schlaufe etwas eintritt welches den vorzeitigen Abbruch der Schlaufe notwendig macht, so kann dies in VB mit exit erreicht werden. Soll zum Beispiel für mindestens eine Minute lang geheizt werden, jedoch beim erreichen der Temperatur von 65° abgebrochen werden, so könnte das folgendermassen aussehen (Pseudocode):

vStart=now()
do now()-vStart > 1 Minute
   Heize weiter
   if Temperatur > 65° then exit
loop