Benutzer-Werkzeuge

Webseiten-Werkzeuge


k10:k10.3:k10.3.3:start

10.3.3 REPEAT-UNTIL-Kontroll-Struktur

Auch die REPEAT-UNTIL-Kontroll-Struktur ist eine Form der Loop-Kontroll-Strukturen.

10.3.3.1 Syntax

Syntax für die REPEAT-UNTIL-Kontroll-Struktur:

REPEAT 
  <Anweisung(en)> 
UNTIL Expression

10.3.3.2 Hinweise zur Syntax

  • Die Schleife wird solange wiederholt, bis Ausdruck wahr ist.
  • Da die Prüfung der Abbruchbedingung am Ende der REPEAT-UNTIL-Kontroll-Struktur erfolgt, wird die Anweisungsfolge mindestens einmal ausgeführt.

10.3.3.3 Beispiel 1

Das Beispiel bezieht sich auf ein Projekt im Kapitel → 18.12 ListContainer. Mit der Anweisung in der vierten Zeile der u.a. Prozedur wird der HTTP-Client in die Spur geschickt, um Daten vom angegebenen Server zu laden. Danach wird in der Warte-Schleife solange gewartet, bis der Download abgeschlossen ist und der HTTP-Client (wieder) inaktiv ist:

Public Sub cmbFeedSource_Click() 
  ListContainer.Clear 
  myHttpClient.URL = Feeds[cmbFeedSource.Index] 
  myHttpClient.Get 
  Repeat 
    Wait 0.01 
  Until myHttpClient.Status = Net.Inactive 
' Automatisch den ersten Feed auswählen - wenn vorhanden 
  If ListContainer.Count Then ListContainer.Index = 0 
End ' cmbFeedSource_Click()

10.3.3.4 Beispiel 2

Die näherungsweise Bestimmung einer Nullstelle einer Funktion f(x)nach dem Sekanten-Näherungsverfahren verwendet die REPEAT-UNTIL-Kontroll-Struktur. Fehlerhafte Startwerte für die beiden Argumente xa und xe werden erkannt und angezeigt. Es sollte gesichert werden, dass die Funktion im abgeschlossenen Intervall [xa | xe] genau eine Nullstelle besitzt.

Sekanten-Verfahren (Numerik)

Abbildung 10.3.3.4.1: Näherungsverfahren mit einstellbarer Genauigkeit

Der Quelltext wird vollständig angegeben:

' Gambas class file
 
Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = False
End ' Form_Open()
 
Public Function f(x_wert As Float) As Float        
    Return (x_wert * x_wert) - 4    
End ' Function f(x_wert As Float) 
 
Public Sub btnNullstelleBerechnenUndAusgeben_Click()
  Dim iCount As Integer
  Dim x1 As Float         ' Linke Intervallgrenze
  Dim x2 As Float         ' Rechte Intervallgrenze
  Dim fEpsilon As Float   ' Abbruchkriterium
  Dim y1, y2, fNullstelle, fDifferenzenquotient As Float
 
  x1 = CFloat(txb_x1.Text)
  x2 = CFloat(txb_x2.Text)
  fEpsilon = CFloat(txb_epsilon.Text)
  If f(x1) * f(x2) > 0 Then
     Message.Error("Die Startwerte x1 und x2 sind nicht zulässig!")
     txb_x2.SetFocus
     Return
  Endif ' f(x1) * f(x2) > 0
  txaTabelle.Clear
 
  Repeat
    y1 = f(x1)
    y2 = f(x2)
    fDifferenzenquotient = (x2 - x1) / (y2 - y1)
    fNullstelle = x1 - (y1 * fDifferenzenquotient)
    txaTabelle.Text = txaTabelle.Text & " " & Str(iCount) & Chr$(9) & Format$(fNullstelle, "0.0000000") 
                      & Chr$(9) & "   " & Str(f(fNullstelle)) & Chr$(10)
      If f(x1) * f(fNullstelle) > 0 Then
        x1 = fNullstelle
      Else
        x2 = fNullstelle
      Endif
    Inc (iCount)
  Until Abs(f(fNullstelle)) < fEpsilon
 
End ' btnNullstelleBerechnenUndAusgeben_Click()
 
Public Sub xGroup_Change()
  txaTabelle.Clear  
End ' xGroup_Change()

Download

Wir verwenden Cookies, um unser Internetangebot optimal zu gestalten. Durch weitere Nutzung dieser Webseite stimmen Sie der Verwendung von Cookies zu. Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung
k10/k10.3/k10.3.3/start.txt · Zuletzt geändert: 20.06.2016 (Externe Bearbeitung)

Seiten-Werkzeuge