Schleife (Programmierung)

Schleife (Programmierung)

Eine Schleife ist eine Kontrollstruktur in Programmiersprachen. Sie wiederholt einen Anweisungs-Block – den so genannten Schleifenrumpf oder Schleifenkörper – so lange, wie eine Laufbedingung gültig ist oder bis eine Abbruchbedingung eintritt. Schleifen, deren Laufbedingung immer erfüllt ist oder die ihre Abbruchbedingung niemals erreichen, und Schleifen, die keine Abbruchbedingungen haben, sind Endlosschleifen.

Inhaltsverzeichnis

Arten

Prinzipiell werden unterschieden:

  • die kopfgesteuerte oder vorprüfende Schleife, bei der die Abbruchbedingung geprüft wird, bevor der Schleifenrumpf durchlaufen wird (meist mit WHILE = während eingeleitet).
  • die fußgesteuerte oder nachprüfende Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird (meist als DO-WHILE = ausführen-während oder REPEAT-UNTIL = wiederholen-bis Konstrukt).
  • die Zählschleife, eine Sonderform der kopfgesteuerten Schleife (meist als FOR = für -Schleife implementiert).
  • die Mengenschleife, eine Sonderform der Zählschleife (meist als FOREACH = für jedes Element der Menge implementiert).

Eine Endlosschleife ohne Abbruchbedingung kann nur von außen unterbrochen werden, etwa durch einen Reset, Interrupt, Defekt, Abschalten des Gerätes oder ähnliches.

Befehle in höheren Programmiersprachen

Hier folgen ein paar der bekanntesten Schleifen in Pseudocode. Die Verwendung in echten Programmiersprachen ist meist sehr ähnlich.

FOR Iterator:=Anfangszahl TO Endezahl STEP Schrittweite DO Schleifenrumpf.

Bei einer For-Schleife zählt der Computer von einer Anfangszahl bis zu einer Endzahl und wiederholt dabei jedes mal den Codeblock („Schleifenrumpf“). Die aktuelle Zahl wird in eine Variable („Iterator“) gesetzt, damit sie bei Bedarf in dem Codeblock Verwendung finden kann (details). Häufig ist die Zählschleife auf Ganzzahlen beschränkt.

WHILE Logischer Ausdruck  DO Schleifenrumpf. 

Bei einer While-Schleife wird der Schleifenrumpf solange wiederholt, bis die logische Operation einen falschen Rückgabewert liefert. Eine logische Operation kann beispielsweise sein: (x > 4) Solange diese Bedingung wahr ist, läuft die Schleife. Wird der Inhalt der logischen Operation nicht im wiederholten Teil des Programmcodes verändert, ist diese Kontrollstruktur meist nicht die richtige, weil diese Schleife sonst kein einziges Mal durchlaufen wird oder unendlich lang läuft.

DO Schleifenrumpf WHILE Logischer Ausdruck

bzw.

REPEAT Schleifenrumpf UNTIL Logischer Ausdruck

Funktioniert genau so wie die While-Schleife, allerdings wird die Abbruchbedingung erst nach dem Durchlauf des eingeschlossenen Programmcodes überprüft.

FOREACH Iterator OF Menge DO Schleifenrumpf

Funktioniert wie eine Zählschleife mit dem Schleifenkörper

FOR Iterator2 := 1 TO Mächtigkeit(Menge) DO
  BEGIN
    Iterator := Iterator2-tes Element von Menge ;
    Schleifenrumpf
  END

Befehle in Assemblersprache

Assemblercode verfügt normalerweise nicht über die aus höheren Programmiersprachen bekannten for/while/repeat Konstrukte. Da aber auch hier Schleifen eingesetzt werden müssen (Verzögerung durch aktives Warten (s.u.), serielles adressiertes Verarbeiten von Daten), stehen einfache Sprungbefehle für unbedingte und bedingte Sprünge zur Verfügung.

Letztere entscheiden anhand eines Statusflags der CPU (z.B. Zero-Flag), ob gesprungen werden muss. Trifft die Voraussetzung nicht zu, so wird der Programmcounter (PC) einfach um eins erhöht. Es wird dann also als nächstes der Befehl nach dem bedingten Sprungbefehl ausgeführt.

Beispiel für Code für einen AVR-Mikrocontroller, der unter Verwendung einer Schleife um insgesamt 5000 Takte durch aktives Warten verzögert:

 ; delaying 4998 clocks
            ldi R0, $07
 Label0:    ldi R1, $ed
 Label1:    dec R1       ; Vermindert Inhalt in R1 um 1
            brne Label1  ; Sprung nur, wenn R1 nun nicht 0 ist.
            dec R0       ; alternativ gehts hier weiter
            brne Label0
 ; delaying 2 clocks
            nop
            nop

Implementierung mit Sprungbefehlen

Früher wurden auch in Hochsprachen-Programmen häufig unbedingte Sprünge (Goto-Befehle) verwendet. Sprachen, die Sprunganweisungen verwenden, ermöglichen das Einfügen einer Marke (engl. Label). Eine solche Marke kann dann als Ziel einer Goto-Anweisung dienen.

Nach neueren Programmierparadigmen, namentlich der strukturierten Programmierung, wird von der Verwendung von Goto-Sprüngen abgeraten, da durch diese der berüchtigte "Spaghetticode" entsteht. Prinzipiell lässt sich jedoch jede Schleifenform mit Sprungbefehlen abbilden.

For-Schleife

Es gibt mehrere Alternativen, For-Schleifen mit Hilfe einfacherer Befehle zu implementieren. Im Normalfall verhalten sich diese Alternativen gleich, aber in einigen speziellen Situationen gibt es Unterschiede. Beispiele für spezielle Situationen sind:

* Die Schrittweite ist 0 (nicht in allen Varianten der For-Schleife möglich).
* Der Startwert oder der Endwert sind die kleinst- oder größtmögliche darstellbare Zahl.

Eine ausführlichere Darstellung der Varianten befindet sich im Artikel For-Schleife.

While-Do-Schleife

WHILE Logischer Ausdruck  DO Befehlssequenz. 

entspricht:

Marke1:
IF NOT Logischer Ausdruck GOTO Marke2 (bedingter Vorwärtssprung)
Befehlssequenz
GOTO Marke1 (Rückwärtssprung)
Marke2:

Wieder wird die Befehlssequenz keinmal durchlaufen, wenn der logische Ausdruck schon zu Beginn falsch ist.

Do-While-Schleife

DO Befehlssequenz WHILE Logischer Ausdruck

entspricht:

Marke1:
Befehlssequenz
IF Logischer Ausdruck GOTO Marke1 

Hier wird die Schleife in jedem Fall einmal durchlaufen. Die Do-While-Schleife ist damit nachprüfend.

Repeat-Until-Schleife

REPEAT Befehlssequenz UNTIL Logischer Ausdruck

entspricht:

Marke1:
Befehlssequenz
IF NOT Logischer Ausdruck GOTO Marke1 (bedingter Rückwärtssprung)

Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Schleife — Der Ausdruck Schleife (von althochdeutsch: sloufen = schlüpfen) bezeichnet: eine Schleife oder Bucht in einem Seil, siehe Bucht (Tauwerk) eine Schnur oder Band, das so gebunden ist, dass zwei Schlaufen entstehen, siehe Schleife (Knoten) eine… …   Deutsch Wikipedia

  • For-Next-Schleife — Viele Programmiersprachen definieren eine For Schleife als eine Kontrollstruktur, mit der man eine Gruppe von Anweisungen (Block) mit einer bestimmten Anzahl von Wiederholungen ausführen kann. Die Definition, wie eine For Schleife auszusehen hat… …   Deutsch Wikipedia

  • Foreach-Schleife — Viele Programmiersprachen definieren eine For Schleife als eine Kontrollstruktur, mit der man eine Gruppe von Anweisungen (Block) mit einer bestimmten Anzahl von Wiederholungen ausführen kann. Die Definition, wie eine For Schleife auszusehen hat… …   Deutsch Wikipedia

  • While-Schleife — In den meisten Programmiersprachen gibt es die While Schleife als Kontrollstruktur. Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, solange eine Bedingung erfüllt ist. Diese Bedingung wird geprüft, bevor die Anweisungsfolge… …   Deutsch Wikipedia

  • Verzweigung (Programmierung) — Eine Bedingte Anweisung ist in der Programmierung ein Programmabschnitt, der nur unter einer bestimmten Bedingung ausgeführt wird. Eine Verzweigung legt fest, welcher von zwei (oder mehr) Programmabschnitten, abhängig von einer (oder mehreren)… …   Deutsch Wikipedia

  • Do-while-Schleife — In den meisten imperativen Programmiersprachen gibt es eine Kontrollstruktur namens Do while Schleife, die es ermöglicht, dass abhängig von einer gegebenen Booleschen Bedingung ein Codeabschnitt wiederholt ausgeführt wird. Das Do while Konstrukt… …   Deutsch Wikipedia

  • Anweisung (Programmierung) — Als Anweisung (engl. statement) bezeichnet man in der Informatik, dort im Bereich der Programmierung, ein zentrales Element vieler imperativer Programmiersprachen. Die Programme derartiger Sprachen setzen sich primär aus einer oder mehreren… …   Deutsch Wikipedia

  • imperative Programmierung — imperative Programmierung,   die Programmiermethode, die eine Berechnung als Folge von Zustandsänderungen von Variablen betrachtet. Ein Programm besteht demnach aus einer Folge von Befehlen an den Computer, wie z. B. »Schreibe in die Variable x… …   Universal-Lexikon

  • Syntax von C-Sharp — Dieser Artikel bietet eine Übersicht einiger Sprachelemente von C#. Inhaltsverzeichnis 1 Bedingte Ausführung (if, else, switch) 2 Schleifen (for, do, while, foreach) 3 Die Sprungbefehle break, continue, goto und return 4 Die using Anweisung …   Deutsch Wikipedia

  • PL SQL — PL/SQL Paradigmen: prozedural Erscheinungsjahr: 1991 Entwickler: Oracle Aktuelle Version: 10.2  (2005) Typisierung …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”