Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier. Eine Schleife ist eine Kontrollstruktur in Programmiersprachen . Sie wiederholt einen Teil des Codes sog. Schleifenkörper ) solange bis eine Abbruchbedingung eintritt. Schleifen die ihre Abbruchbedingung niemals und Schleifen die keine Abbruchbedingungen haben sind Endlosschleifen .
Prinzipiell werden unterschieden:
die kopfgesteuerte Schleife bei der erst die Abbruchbedingung wird bevor der Schleifenkörper durchlaufen wird (meist WHILE eingeleitet).
die fußgesteuerte Schleife bei der nach dem Durchlauf Schleifenkörpers die Abbruchbedingung überprüft wird (meist als DO - WHILE oder REPEAT - UNTIL Konstrukt).
die Zählschleife eine Sonderform der kopfgesteuerten Schleife (meist FOR -Schleife implementiert).
Eine Endlosschleife kann nur von Außen werden ( Reset Interrupt Abschalten des Geräts Defekt oder Ähnliches).
Hier folgen ein paar der bekanntesten in Pseudocode . Die Verwendung in echten Programmiersprachen ist sehr ähnlich.
FOR Iterator := Anfangszahl TO Endezahl DO Befehlssequenz .
Hier zählt der Computer von einer bis zu einer Endzahl und wiederholt dabei den Codeblock. Die aktuelle Zahl wird in Variable gesetzt damit sie bei Bedarf Verwendung dem Codeblock finden kann.
WHILE Logischer Ausdruck DO Befehlssequenz .
Der Codeblock wird solange wiederholt bis logische Operation einen falschen Rückgabewert liefert. Eine Operation kann beispielsweise sein: (x > 4) diese Bedingung wahr ist läuft die Schleife. der Inhalt der logischen Operation nicht im Teil des Programmcodes verändert ist diese Kontrollstruktur nicht die richtige weil diese Schleife sonst einziges Mal durchlaufen wird oder unendlich lang
DO Befehlssequenz WHILE Logischer Ausdruck
bzw.
REPEAT Befehlssequenz UNTIL Logischer Ausdruck
Funtioniert genau so wie die WHILE-Schleife wird die Abbruchbedingung erst nach den Durchlauf eingeschlossenen Programmcodes überprüft. Das kann beim Programmieren hilfreich sein.
Assemblercode verfügt normaler Weise nicht über aus höheren Programmiersprachen bekannten for/while/repeat Konstrukte. Da auch hier Schleifen eingesetzt werden müssen (Verzögerung aktives Warten (s.u.) serielles adressiertes Verarbeiten von stehen einfache Sprungbefehle für unbedingte und bedingte zur Verfügung.
Letztere entscheiden anhand eines Statusflags der (z.B. Zero-Flag) ob gesprungen werden muss. Trifft Voraussetzung nicht zu so wird der Programmcounter einfach um eins erhöht. Es wird dann als Nächstes der Befehl nach dem bedingten ausgeführt.
Beispiel für Code für einen AVR der unter Verwendung einer Schleife um insgesamt Takte durch aktives Warten verzögert:
; delaying 4998 clocks ldi R0 Label0: ldi R1 $ed Label1: dec R1 Vermindert Inhalt in R1 um 1 brne ; Sprung nur wenn R1 nun nicht ist. dec R0 ; alternativ gehts hier brne Label0 ; delaying 2 clocks nop
Früher war es üblich in Programmen ( GOTO -Befehl) zu verwenden. In einfachen Programmiersprachen wie ist dies manchmal notwendig. Auch Programme in Fortran verwenden oft Sprungbefehle.
Sprachen die Sprunganweisungen verwenden ermöglichen das einer Marke ( engl. Label). Eine solche Marke kann dann Ziel einer GOTO -Anweisung dienen.
In neueren Sprachen wird die Verwendung GOTO soweit wie möglich vermieden auch wenn durchaus Situationen gibt in denen die Verwendung GOTO sinnvoll ist.