User Tools

Site Tools


k10:k10.3:k10.3.4:start

10.3.4 WHILE-WEND control structure

The WHILE-WEND control structure presented in the following sections is another form of loop control structure.

10.3.4.1 Syntax

Syntax for the WHILE-WEND control structure:

WHILE Expression
  <Instruction(s)> 
WEND

10.3.4.2 Notes on the syntax

  • The loop is repeated as long as the expression is true.
  • Since the check of the termination condition is carried out at the beginning, the WHILE-WEND control structure is never * executed if the (start) printout is already incorrect.
  • ' DO WHILE'-LOOP control structure is an equivalent structure to the general DO-LOOP control structure → chapter 10.3.1 Do..Loop.

10.3.4.3 Example 1

A file is opened for reading. Then the contents of the file are read out line by line and each line is stored in an array - as long as the end of the file has not yet been reached and lines can still be read:

  hFile = Open sRubrikPfad For Input 
  While NOT Eof(hFile) 
    Line Input #hFile, sZeile 
    aSuchDateiMatrix.Add(sZeile) 
  Wend 
  Close #hFile 
  aSuchDateiMatrix.Sort(0) 

10.3.4.4.4 Example 2

The task: 'As long as there is still a block of two consecutive blanks in a character string, all blocks of two blanks are to be replaced by a single blank' has a simple solution:

While InStr(sTestString, "  ") 
  sTestString = Replace$(sTestString, "  ", " ") 
Wend

10.3.4.5 Example 3

Example 3 demonstrates the use of four different loop control structures for processing the same task:

  • FOR..TO..NEXT control structure
  • REPEAT..UNTIL control structure
  • WHILE..WEND control structure
  • DO..WHILE..LOOP control structure (alternative)

Partialsummen

Figure 10.3.4.5.5.1: Calculation of partial sums according to 3 variants

The source text is only specified in the relevant extracts:

Public Sub btnPartialsummeBerechnen_Click()
  If KontrolleEingabedaten() = "Data input error-free!" Then
     If optVariante1.Value = True Then
        Variante_1(iAnfangszahl, iEndzahl) ' FOR..TO..NEXT
     Else If optVariante2.Value = True
        Variante_2(iAnfangszahl, iEndzahl) ' REPEAT..UNTIL
     Else
        Variante_3(iAnfangszahl, iEndzahl) ' WHILE..WEND
     Endif 
  Endif
End ' btnPartialsummeBerechnen
 
Private Sub Variante_1(iAnfang As Integer, iEnde As Integer) ' FOR..TO..NEXT
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
  Dim iCount As Integer = 0
 
  For iCount = 1 To (iEnde - iAnfang + 1) Step 1
      iPartialsumme = iPartialsumme + iSummand
    ' Overflow due to overrange for integer?
      If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
         txtPartialsumme.Text = "ERROR Sum " & String.Chr(8713) & " INTEGER"
         Return
      Endif
      Inc iSummand
  Next ' iCount
 
  txtPartialsumme.Text = Str(iPartialsumme)
 
End
 
Private Sub Variante_2(iAnfang As Integer, iEnde As Integer) ' REPEAT..UNTIL
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
 
  Repeat
    iPartialsumme = iPartialsumme + iSummand
    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
       txtPartialsumme.Text = "ERROR Sum " & String.Chr(8713) & " INTEGER"
       Return
    Endif 
    Inc iSummand
  Until (iSummand > iEnde)
 
  txtPartialsumme.Text = Str(iPartialsumme)  
 
End
 
Private Sub Variante_3(iAnfang As Integer, iEnde As Integer) ' WHILE..WEND
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
 
  While (iSummand < iEndzahl + 1)
    iPartialsumme = iPartialsumme + iSummand  
    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
       txtPartialsumme.Text = "ERROR Sum " & String.Chr(8713) & " INTEGER"
       Return
    Endif ' Partialsumme-Überlauf ? 
    Inc iSummand
  Wend ' While End
 
  txtPartialsumme.Text = Str(iPartialsumme)
 
' Alternative Variante 3:
' Do While (iSummand < iEnde + 1)
'    iPartialsumme = iPartialsumme + iSummand
'    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
'       txtPartialsumme.Text = "ERROR Sum " & String.Chr(8713) & " INTEGER"
'       Return
'    Endif
'    Inc iSummand
' Loop  
' txtPartialsumme.Text = Str(iPartialsumme)
 
End

Download

10.3.4 WHILE-WEND-Kontroll-Struktur

Auch die in den folgenden Abschnitten vorgestellte WHILE-WEND-Kontroll-Struktur ist eine weitere Form der Loop-Kontroll-Strukturen.

10.3.4.1 Syntax

Syntax für die WHILE-WEND-Kontroll-Struktur:

WHILE Expression
  <Anweisung(en)> 
WEND

10.3.4.2 Hinweise zur Syntax

  • Die Schleife wird wiederholt, solange der Ausdruck wahr ist.
  • Da die Prüfung der Abbruchbedingung am Anfang erfolgt, wird die WHILE-WEND-Kontroll-Struktur nie ausgeführt, wenn der (Start-)Ausdruck bereits falsch ist.
  • 'DO WHILE'-LOOP-Kontroll-Struktur ist eine äquivalente Struktur zur allgemeinen DO-LOOP-Kontroll-Struktur→ Kapitel 10.3.1 Do..Loop.

10.3.4.3 Beispiel 1

Eine Datei wird zum Lesen geöffnet. Dann wird der Inhalt der Datei zeilenweise ausgelesen und jede Zeile in einem Array gespeichert – solange das Ende der Datei noch nicht erreicht ist und noch Zeilen ausgelesen werden können:

  hFile = Open sRubrikPfad For Input 
  While NOT Eof(hFile) 
    Line Input #hFile, sZeile 
    aSuchDateiMatrix.Add(sZeile) 
  Wend 
  Close #hFile 
  aSuchDateiMatrix.Sort(0) 

10.3.4.4 Beispiel 2

Die Aufgabe: 'Solange noch ein Block von zwei aufeinander folgenden Leerzeichen in einer Zeichenkette existiert, sollen alle Blöcke von zwei Leerzeichen durch ein einziges Leerzeichen ersetzt werden' hat eine einfache Lösung:

While InStr(sTestString, "  ") 
  sTestString = Replace$(sTestString, "  ", " ") 
Wend

10.3.4.5 Beispiel 3

Das Beispiel 3 demonstriert den Einsatz von vier unterschiedlichen Loop-Kontroll-Strukturen für die Bearbeitung der gleichen Aufgabe:

  • FOR..TO..NEXT-Kontroll-Struktur
  • REPEAT..UNTIL-Kontroll-Struktur
  • WHILE..WEND-Kontroll-Struktur
  • DO..WHILE..LOOP-Kontroll-Struktur (Alternative)

Partialsummen

Abbildung 10.3.4.5.1: Berechnung von Partialsummen nach 3 Varianten

Der Quelltext wird nur in den relevanten Auszügen angegeben:

Public Sub btnPartialsummeBerechnen_Click()
  If KontrolleEingabedaten() = "Dateneingabe fehlerfrei!" Then
     If optVariante1.Value = True Then
        Variante_1(iAnfangszahl, iEndzahl) ' Kontrollstruktur FOR..TO..NEXT
     Else If optVariante2.Value = True
        Variante_2(iAnfangszahl, iEndzahl) ' Kontrollstruktur REPEAT..UNTIL
     Else
        Variante_3(iAnfangszahl, iEndzahl) ' Kontrollstruktur WHILE..WEND
     Endif 
  Endif ' KontrolleEingabedaten()  
End ' btnPartialsummeBerechnen
 
Private Sub Variante_1(iAnfang As Integer, iEnde As Integer) ' FOR..TO..NEXT
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
  Dim iCount As Integer = 0
 
  For iCount = 1 To (iEnde - iAnfang + 1) Step 1
      iPartialsumme = iPartialsumme + iSummand
    ' Überlauf wegen Bereichsüberschreitung für Integer?
      If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
         txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER"
         Return
      Endif ' Partialsumme-Überlauf ?
      Inc iSummand
  Next ' iCount
 
  txtPartialsumme.Text = Str(iPartialsumme)
 
End ' Variante_1 - Kontrollstruktur FOR..TO..[STEP]..NEXT
 
Private Sub Variante_2(iAnfang As Integer, iEnde As Integer) ' REPEAT..UNTIL
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
 
  Repeat
    iPartialsumme = iPartialsumme + iSummand
    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
       txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER"
       Return
    Endif ' Partialsumme-Überlauf ?
    Inc iSummand
  Until (iSummand > iEnde)
 
  txtPartialsumme.Text = Str(iPartialsumme)  
 
End ' Variante_2 - Kontrollstruktur REPEAT..UNTIL
 
Private Sub Variante_3(iAnfang As Integer, iEnde As Integer) ' WHILE..WEND
  Dim iPartialsumme As Integer = 0
  Dim iSummand As Integer = iAnfang
 
  While (iSummand < iEndzahl + 1)
    iPartialsumme = iPartialsumme + iSummand  
    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
       txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER"
       Return
    Endif ' Partialsumme-Überlauf ? 
    Inc iSummand
  Wend ' While End
 
  txtPartialsumme.Text = Str(iPartialsumme)
 
' Alternative Variante 3:
' Do While (iSummand < iEnde + 1)
'    iPartialsumme = iPartialsumme + iSummand
'    If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then
'       txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER"
'       Return
'    Endif ' Partialsumme-Überlauf ?
'    Inc iSummand
' Loop  
' txtPartialsumme.Text = Str(iPartialsumme)
 
End ' Variante_3 - Kontrollstruktur WHILE..WEND

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k10/k10.3/k10.3.4/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools